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-prefixes=ANYPWR,PWR5
3; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr6 < %s | FileCheck %s --check-prefixes=ANYPWR,PWR6
4; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 < %s | FileCheck %s --check-prefixes=ANYPWR,PWR7
5; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr8 < %s | FileCheck %s --check-prefixes=ANYPWR,PWR8
6; RUN: llc -verify-machineinstrs -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr9 < %s | FileCheck %s --check-prefixes=ANYPWR,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:    vsrb 3, 2, 3
167; PWR7-NEXT:    addi 3, 3, .LCPI2_1@toc@l
168; PWR7-NEXT:    xxland 35, 35, 0
169; PWR7-NEXT:    lxvw4x 0, 0, 3
170; PWR7-NEXT:    vsububm 2, 2, 3
171; PWR7-NEXT:    vsrb 3, 2, 4
172; PWR7-NEXT:    xxland 34, 34, 0
173; PWR7-NEXT:    xxland 35, 35, 0
174; PWR7-NEXT:    vaddubm 2, 2, 3
175; PWR7-NEXT:    vsrb 3, 2, 5
176; PWR7-NEXT:    vspltisb 5, 15
177; PWR7-NEXT:    vaddubm 2, 2, 3
178; PWR7-NEXT:    xxland 34, 34, 37
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:    vsrb 3, 2, 3
263; PWR7-NEXT:    addi 3, 3, .LCPI3_1@toc@l
264; PWR7-NEXT:    xxland 35, 35, 0
265; PWR7-NEXT:    lxvw4x 0, 0, 3
266; PWR7-NEXT:    vsububm 2, 2, 3
267; PWR7-NEXT:    vsrb 3, 2, 4
268; PWR7-NEXT:    xxland 34, 34, 0
269; PWR7-NEXT:    vspltisb 4, 4
270; PWR7-NEXT:    xxland 35, 35, 0
271; PWR7-NEXT:    vaddubm 2, 2, 3
272; PWR7-NEXT:    vsrb 3, 2, 4
273; PWR7-NEXT:    vspltisb 4, 15
274; PWR7-NEXT:    vaddubm 2, 2, 3
275; PWR7-NEXT:    vspltisb 3, 3
276; PWR7-NEXT:    xxland 34, 34, 36
277; PWR7-NEXT:    vcmpgtub 2, 3, 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:    vsrb 3, 2, 3
361; PWR7-NEXT:    addi 3, 3, .LCPI4_1@toc@l
362; PWR7-NEXT:    xxland 35, 35, 0
363; PWR7-NEXT:    lxvw4x 0, 0, 3
364; PWR7-NEXT:    vsububm 2, 2, 3
365; PWR7-NEXT:    vsrb 3, 2, 4
366; PWR7-NEXT:    xxland 34, 34, 0
367; PWR7-NEXT:    vspltisb 4, 4
368; PWR7-NEXT:    xxland 35, 35, 0
369; PWR7-NEXT:    vaddubm 2, 2, 3
370; PWR7-NEXT:    vsrb 3, 2, 4
371; PWR7-NEXT:    vspltisb 4, 15
372; PWR7-NEXT:    vaddubm 2, 2, 3
373; PWR7-NEXT:    vspltisb 3, 3
374; PWR7-NEXT:    xxland 34, 34, 36
375; PWR7-NEXT:    vcmpgtub 2, 2, 3
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, 15
457; PWR7-NEXT:    vsrb 3, 2, 3
458; PWR7-NEXT:    addi 3, 3, .LCPI5_1@toc@l
459; PWR7-NEXT:    xxland 35, 35, 0
460; PWR7-NEXT:    lxvw4x 0, 0, 3
461; PWR7-NEXT:    vsububm 2, 2, 3
462; PWR7-NEXT:    vsrb 3, 2, 4
463; PWR7-NEXT:    xxland 34, 34, 0
464; PWR7-NEXT:    vspltisb 4, 4
465; PWR7-NEXT:    xxland 35, 35, 0
466; PWR7-NEXT:    vaddubm 2, 2, 3
467; PWR7-NEXT:    vsrb 3, 2, 4
468; PWR7-NEXT:    vaddubm 2, 2, 3
469; PWR7-NEXT:    xxland 34, 34, 37
470; PWR7-NEXT:    vcmpgtub 2, 4, 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, 15
552; PWR7-NEXT:    vsrb 3, 2, 3
553; PWR7-NEXT:    addi 3, 3, .LCPI6_1@toc@l
554; PWR7-NEXT:    xxland 35, 35, 0
555; PWR7-NEXT:    lxvw4x 0, 0, 3
556; PWR7-NEXT:    vsububm 2, 2, 3
557; PWR7-NEXT:    vsrb 3, 2, 4
558; PWR7-NEXT:    xxland 34, 34, 0
559; PWR7-NEXT:    vspltisb 4, 4
560; PWR7-NEXT:    xxland 35, 35, 0
561; PWR7-NEXT:    vaddubm 2, 2, 3
562; PWR7-NEXT:    vsrb 3, 2, 4
563; PWR7-NEXT:    vaddubm 2, 2, 3
564; PWR7-NEXT:    xxland 34, 34, 37
565; PWR7-NEXT:    vcmpgtub 2, 2, 4
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:    vsrb 3, 2, 3
649; PWR7-NEXT:    addi 3, 3, .LCPI7_1@toc@l
650; PWR7-NEXT:    xxland 35, 35, 0
651; PWR7-NEXT:    lxvw4x 0, 0, 3
652; PWR7-NEXT:    vsububm 2, 2, 3
653; PWR7-NEXT:    vsrb 3, 2, 4
654; PWR7-NEXT:    xxland 34, 34, 0
655; PWR7-NEXT:    vspltisb 4, 4
656; PWR7-NEXT:    xxland 35, 35, 0
657; PWR7-NEXT:    vaddubm 2, 2, 3
658; PWR7-NEXT:    vsrb 3, 2, 4
659; PWR7-NEXT:    vspltisb 4, 15
660; PWR7-NEXT:    vaddubm 2, 2, 3
661; PWR7-NEXT:    vspltisb 3, 5
662; PWR7-NEXT:    xxland 34, 34, 36
663; PWR7-NEXT:    vcmpgtub 2, 3, 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:    vsrb 3, 2, 3
747; PWR7-NEXT:    addi 3, 3, .LCPI8_1@toc@l
748; PWR7-NEXT:    xxland 35, 35, 0
749; PWR7-NEXT:    lxvw4x 0, 0, 3
750; PWR7-NEXT:    vsububm 2, 2, 3
751; PWR7-NEXT:    vsrb 3, 2, 4
752; PWR7-NEXT:    xxland 34, 34, 0
753; PWR7-NEXT:    vspltisb 4, 4
754; PWR7-NEXT:    xxland 35, 35, 0
755; PWR7-NEXT:    vaddubm 2, 2, 3
756; PWR7-NEXT:    vsrb 3, 2, 4
757; PWR7-NEXT:    vspltisb 4, 15
758; PWR7-NEXT:    vaddubm 2, 2, 3
759; PWR7-NEXT:    vspltisb 3, 5
760; PWR7-NEXT:    xxland 34, 34, 36
761; PWR7-NEXT:    vcmpgtub 2, 2, 3
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:    vsrb 3, 2, 3
845; PWR7-NEXT:    addi 3, 3, .LCPI9_1@toc@l
846; PWR7-NEXT:    xxland 35, 35, 0
847; PWR7-NEXT:    lxvw4x 0, 0, 3
848; PWR7-NEXT:    vsububm 2, 2, 3
849; PWR7-NEXT:    vsrb 3, 2, 4
850; PWR7-NEXT:    xxland 34, 34, 0
851; PWR7-NEXT:    vspltisb 4, 4
852; PWR7-NEXT:    xxland 35, 35, 0
853; PWR7-NEXT:    vaddubm 2, 2, 3
854; PWR7-NEXT:    vsrb 3, 2, 4
855; PWR7-NEXT:    vspltisb 4, 15
856; PWR7-NEXT:    vaddubm 2, 2, 3
857; PWR7-NEXT:    vspltisb 3, 6
858; PWR7-NEXT:    xxland 34, 34, 36
859; PWR7-NEXT:    vcmpgtub 2, 3, 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:    vsrb 3, 2, 3
943; PWR7-NEXT:    addi 3, 3, .LCPI10_1@toc@l
944; PWR7-NEXT:    xxland 35, 35, 0
945; PWR7-NEXT:    lxvw4x 0, 0, 3
946; PWR7-NEXT:    vsububm 2, 2, 3
947; PWR7-NEXT:    vsrb 3, 2, 4
948; PWR7-NEXT:    xxland 34, 34, 0
949; PWR7-NEXT:    vspltisb 4, 4
950; PWR7-NEXT:    xxland 35, 35, 0
951; PWR7-NEXT:    vaddubm 2, 2, 3
952; PWR7-NEXT:    vsrb 3, 2, 4
953; PWR7-NEXT:    vspltisb 4, 15
954; PWR7-NEXT:    vaddubm 2, 2, 3
955; PWR7-NEXT:    vspltisb 3, 6
956; PWR7-NEXT:    xxland 34, 34, 36
957; PWR7-NEXT:    vcmpgtub 2, 2, 3
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:    vsrb 3, 2, 3
1041; PWR7-NEXT:    addi 3, 3, .LCPI11_1@toc@l
1042; PWR7-NEXT:    xxland 35, 35, 0
1043; PWR7-NEXT:    lxvw4x 0, 0, 3
1044; PWR7-NEXT:    vsububm 2, 2, 3
1045; PWR7-NEXT:    vsrb 3, 2, 4
1046; PWR7-NEXT:    xxland 34, 34, 0
1047; PWR7-NEXT:    vspltisb 4, 4
1048; PWR7-NEXT:    xxland 35, 35, 0
1049; PWR7-NEXT:    vaddubm 2, 2, 3
1050; PWR7-NEXT:    vsrb 3, 2, 4
1051; PWR7-NEXT:    vspltisb 4, 15
1052; PWR7-NEXT:    vaddubm 2, 2, 3
1053; PWR7-NEXT:    vspltisb 3, 7
1054; PWR7-NEXT:    xxland 34, 34, 36
1055; PWR7-NEXT:    vcmpgtub 2, 3, 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:    vsrh 3, 2, 3
1245; PWR7-NEXT:    addi 3, 3, .LCPI14_1@toc@l
1246; PWR7-NEXT:    vspltisb 0, 15
1247; PWR7-NEXT:    xxland 35, 35, 0
1248; PWR7-NEXT:    lxvw4x 0, 0, 3
1249; PWR7-NEXT:    vsubuhm 2, 2, 3
1250; PWR7-NEXT:    vsrh 3, 2, 4
1251; PWR7-NEXT:    xxland 34, 34, 0
1252; PWR7-NEXT:    xxland 35, 35, 0
1253; PWR7-NEXT:    vadduhm 2, 2, 3
1254; PWR7-NEXT:    vsrh 3, 2, 5
1255; PWR7-NEXT:    vxor 5, 5, 5
1256; PWR7-NEXT:    vadduhm 2, 2, 3
1257; PWR7-NEXT:    vspltisb 3, 1
1258; PWR7-NEXT:    xxland 34, 34, 32
1259; PWR7-NEXT:    vmladduhm 2, 2, 3, 5
1260; PWR7-NEXT:    vspltish 3, 8
1261; PWR7-NEXT:    vsrh 2, 2, 3
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:    vspltisb 5, 15
1356; PWR7-NEXT:    vsrh 3, 2, 3
1357; PWR7-NEXT:    addi 3, 3, .LCPI15_1@toc@l
1358; PWR7-NEXT:    xxland 35, 35, 0
1359; PWR7-NEXT:    lxvw4x 0, 0, 3
1360; PWR7-NEXT:    vsubuhm 2, 2, 3
1361; PWR7-NEXT:    vsrh 3, 2, 4
1362; PWR7-NEXT:    xxland 34, 34, 0
1363; PWR7-NEXT:    vspltish 4, 4
1364; PWR7-NEXT:    xxland 35, 35, 0
1365; PWR7-NEXT:    vadduhm 2, 2, 3
1366; PWR7-NEXT:    vsrh 3, 2, 4
1367; PWR7-NEXT:    vxor 4, 4, 4
1368; PWR7-NEXT:    vadduhm 2, 2, 3
1369; PWR7-NEXT:    vspltisb 3, 1
1370; PWR7-NEXT:    xxland 34, 34, 37
1371; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
1372; PWR7-NEXT:    vspltish 3, 8
1373; PWR7-NEXT:    vsrh 2, 2, 3
1374; PWR7-NEXT:    vspltish 3, 3
1375; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
1469; PWR7-NEXT:    vsrh 3, 2, 3
1470; PWR7-NEXT:    addi 3, 3, .LCPI16_1@toc@l
1471; PWR7-NEXT:    xxland 35, 35, 0
1472; PWR7-NEXT:    lxvw4x 0, 0, 3
1473; PWR7-NEXT:    vsubuhm 2, 2, 3
1474; PWR7-NEXT:    vsrh 3, 2, 4
1475; PWR7-NEXT:    xxland 34, 34, 0
1476; PWR7-NEXT:    vspltish 4, 4
1477; PWR7-NEXT:    xxland 35, 35, 0
1478; PWR7-NEXT:    vadduhm 2, 2, 3
1479; PWR7-NEXT:    vsrh 3, 2, 4
1480; PWR7-NEXT:    vxor 4, 4, 4
1481; PWR7-NEXT:    vadduhm 2, 2, 3
1482; PWR7-NEXT:    vspltisb 3, 1
1483; PWR7-NEXT:    xxland 34, 34, 37
1484; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
1485; PWR7-NEXT:    vspltish 3, 8
1486; PWR7-NEXT:    vsrh 2, 2, 3
1487; PWR7-NEXT:    vspltish 3, 3
1488; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vxor 5, 5, 5
1576; PWR7-NEXT:    addi 3, 3, .LCPI17_0@toc@l
1577; PWR7-NEXT:    vspltish 4, 2
1578; PWR7-NEXT:    lxvw4x 0, 0, 3
1579; PWR7-NEXT:    addis 3, 2, .LCPI17_1@toc@ha
1580; PWR7-NEXT:    vspltisb 0, 15
1581; PWR7-NEXT:    vsrh 3, 2, 3
1582; PWR7-NEXT:    addi 3, 3, .LCPI17_1@toc@l
1583; PWR7-NEXT:    xxland 35, 35, 0
1584; PWR7-NEXT:    lxvw4x 0, 0, 3
1585; PWR7-NEXT:    vsubuhm 2, 2, 3
1586; PWR7-NEXT:    vsrh 3, 2, 4
1587; PWR7-NEXT:    xxland 34, 34, 0
1588; PWR7-NEXT:    vspltish 4, 4
1589; PWR7-NEXT:    xxland 35, 35, 0
1590; PWR7-NEXT:    vadduhm 2, 2, 3
1591; PWR7-NEXT:    vsrh 3, 2, 4
1592; PWR7-NEXT:    vadduhm 2, 2, 3
1593; PWR7-NEXT:    vspltisb 3, 1
1594; PWR7-NEXT:    xxland 34, 34, 32
1595; PWR7-NEXT:    vmladduhm 2, 2, 3, 5
1596; PWR7-NEXT:    vspltish 3, 8
1597; PWR7-NEXT:    vsrh 2, 2, 3
1598; PWR7-NEXT:    vcmpgtuh 2, 4, 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:    vxor 5, 5, 5
1686; PWR7-NEXT:    addi 3, 3, .LCPI18_0@toc@l
1687; PWR7-NEXT:    vspltish 4, 2
1688; PWR7-NEXT:    lxvw4x 0, 0, 3
1689; PWR7-NEXT:    addis 3, 2, .LCPI18_1@toc@ha
1690; PWR7-NEXT:    vspltisb 0, 15
1691; PWR7-NEXT:    vsrh 3, 2, 3
1692; PWR7-NEXT:    addi 3, 3, .LCPI18_1@toc@l
1693; PWR7-NEXT:    xxland 35, 35, 0
1694; PWR7-NEXT:    lxvw4x 0, 0, 3
1695; PWR7-NEXT:    vsubuhm 2, 2, 3
1696; PWR7-NEXT:    vsrh 3, 2, 4
1697; PWR7-NEXT:    xxland 34, 34, 0
1698; PWR7-NEXT:    vspltish 4, 4
1699; PWR7-NEXT:    xxland 35, 35, 0
1700; PWR7-NEXT:    vadduhm 2, 2, 3
1701; PWR7-NEXT:    vsrh 3, 2, 4
1702; PWR7-NEXT:    vadduhm 2, 2, 3
1703; PWR7-NEXT:    vspltisb 3, 1
1704; PWR7-NEXT:    xxland 34, 34, 32
1705; PWR7-NEXT:    vmladduhm 2, 2, 3, 5
1706; PWR7-NEXT:    vspltish 3, 8
1707; PWR7-NEXT:    vsrh 2, 2, 3
1708; PWR7-NEXT:    vcmpgtuh 2, 2, 4
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:    vspltisb 5, 15
1802; PWR7-NEXT:    vsrh 3, 2, 3
1803; PWR7-NEXT:    addi 3, 3, .LCPI19_1@toc@l
1804; PWR7-NEXT:    xxland 35, 35, 0
1805; PWR7-NEXT:    lxvw4x 0, 0, 3
1806; PWR7-NEXT:    vsubuhm 2, 2, 3
1807; PWR7-NEXT:    vsrh 3, 2, 4
1808; PWR7-NEXT:    xxland 34, 34, 0
1809; PWR7-NEXT:    vspltish 4, 4
1810; PWR7-NEXT:    xxland 35, 35, 0
1811; PWR7-NEXT:    vadduhm 2, 2, 3
1812; PWR7-NEXT:    vsrh 3, 2, 4
1813; PWR7-NEXT:    vxor 4, 4, 4
1814; PWR7-NEXT:    vadduhm 2, 2, 3
1815; PWR7-NEXT:    vspltisb 3, 1
1816; PWR7-NEXT:    xxland 34, 34, 37
1817; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
1818; PWR7-NEXT:    vspltish 3, 8
1819; PWR7-NEXT:    vsrh 2, 2, 3
1820; PWR7-NEXT:    vspltish 3, 5
1821; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
1915; PWR7-NEXT:    vsrh 3, 2, 3
1916; PWR7-NEXT:    addi 3, 3, .LCPI20_1@toc@l
1917; PWR7-NEXT:    xxland 35, 35, 0
1918; PWR7-NEXT:    lxvw4x 0, 0, 3
1919; PWR7-NEXT:    vsubuhm 2, 2, 3
1920; PWR7-NEXT:    vsrh 3, 2, 4
1921; PWR7-NEXT:    xxland 34, 34, 0
1922; PWR7-NEXT:    vspltish 4, 4
1923; PWR7-NEXT:    xxland 35, 35, 0
1924; PWR7-NEXT:    vadduhm 2, 2, 3
1925; PWR7-NEXT:    vsrh 3, 2, 4
1926; PWR7-NEXT:    vxor 4, 4, 4
1927; PWR7-NEXT:    vadduhm 2, 2, 3
1928; PWR7-NEXT:    vspltisb 3, 1
1929; PWR7-NEXT:    xxland 34, 34, 37
1930; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
1931; PWR7-NEXT:    vspltish 3, 8
1932; PWR7-NEXT:    vsrh 2, 2, 3
1933; PWR7-NEXT:    vspltish 3, 5
1934; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
2028; PWR7-NEXT:    vsrh 3, 2, 3
2029; PWR7-NEXT:    addi 3, 3, .LCPI21_1@toc@l
2030; PWR7-NEXT:    xxland 35, 35, 0
2031; PWR7-NEXT:    lxvw4x 0, 0, 3
2032; PWR7-NEXT:    vsubuhm 2, 2, 3
2033; PWR7-NEXT:    vsrh 3, 2, 4
2034; PWR7-NEXT:    xxland 34, 34, 0
2035; PWR7-NEXT:    vspltish 4, 4
2036; PWR7-NEXT:    xxland 35, 35, 0
2037; PWR7-NEXT:    vadduhm 2, 2, 3
2038; PWR7-NEXT:    vsrh 3, 2, 4
2039; PWR7-NEXT:    vxor 4, 4, 4
2040; PWR7-NEXT:    vadduhm 2, 2, 3
2041; PWR7-NEXT:    vspltisb 3, 1
2042; PWR7-NEXT:    xxland 34, 34, 37
2043; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2044; PWR7-NEXT:    vspltish 3, 8
2045; PWR7-NEXT:    vsrh 2, 2, 3
2046; PWR7-NEXT:    vspltish 3, 6
2047; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
2141; PWR7-NEXT:    vsrh 3, 2, 3
2142; PWR7-NEXT:    addi 3, 3, .LCPI22_1@toc@l
2143; PWR7-NEXT:    xxland 35, 35, 0
2144; PWR7-NEXT:    lxvw4x 0, 0, 3
2145; PWR7-NEXT:    vsubuhm 2, 2, 3
2146; PWR7-NEXT:    vsrh 3, 2, 4
2147; PWR7-NEXT:    xxland 34, 34, 0
2148; PWR7-NEXT:    vspltish 4, 4
2149; PWR7-NEXT:    xxland 35, 35, 0
2150; PWR7-NEXT:    vadduhm 2, 2, 3
2151; PWR7-NEXT:    vsrh 3, 2, 4
2152; PWR7-NEXT:    vxor 4, 4, 4
2153; PWR7-NEXT:    vadduhm 2, 2, 3
2154; PWR7-NEXT:    vspltisb 3, 1
2155; PWR7-NEXT:    xxland 34, 34, 37
2156; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2157; PWR7-NEXT:    vspltish 3, 8
2158; PWR7-NEXT:    vsrh 2, 2, 3
2159; PWR7-NEXT:    vspltish 3, 6
2160; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
2254; PWR7-NEXT:    vsrh 3, 2, 3
2255; PWR7-NEXT:    addi 3, 3, .LCPI23_1@toc@l
2256; PWR7-NEXT:    xxland 35, 35, 0
2257; PWR7-NEXT:    lxvw4x 0, 0, 3
2258; PWR7-NEXT:    vsubuhm 2, 2, 3
2259; PWR7-NEXT:    vsrh 3, 2, 4
2260; PWR7-NEXT:    xxland 34, 34, 0
2261; PWR7-NEXT:    vspltish 4, 4
2262; PWR7-NEXT:    xxland 35, 35, 0
2263; PWR7-NEXT:    vadduhm 2, 2, 3
2264; PWR7-NEXT:    vsrh 3, 2, 4
2265; PWR7-NEXT:    vxor 4, 4, 4
2266; PWR7-NEXT:    vadduhm 2, 2, 3
2267; PWR7-NEXT:    vspltisb 3, 1
2268; PWR7-NEXT:    xxland 34, 34, 37
2269; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2270; PWR7-NEXT:    vspltish 3, 8
2271; PWR7-NEXT:    vsrh 2, 2, 3
2272; PWR7-NEXT:    vspltish 3, 7
2273; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
2367; PWR7-NEXT:    vsrh 3, 2, 3
2368; PWR7-NEXT:    addi 3, 3, .LCPI24_1@toc@l
2369; PWR7-NEXT:    xxland 35, 35, 0
2370; PWR7-NEXT:    lxvw4x 0, 0, 3
2371; PWR7-NEXT:    vsubuhm 2, 2, 3
2372; PWR7-NEXT:    vsrh 3, 2, 4
2373; PWR7-NEXT:    xxland 34, 34, 0
2374; PWR7-NEXT:    vspltish 4, 4
2375; PWR7-NEXT:    xxland 35, 35, 0
2376; PWR7-NEXT:    vadduhm 2, 2, 3
2377; PWR7-NEXT:    vsrh 3, 2, 4
2378; PWR7-NEXT:    vxor 4, 4, 4
2379; PWR7-NEXT:    vadduhm 2, 2, 3
2380; PWR7-NEXT:    vspltisb 3, 1
2381; PWR7-NEXT:    xxland 34, 34, 37
2382; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2383; PWR7-NEXT:    vspltish 3, 8
2384; PWR7-NEXT:    vsrh 2, 2, 3
2385; PWR7-NEXT:    vspltish 3, 7
2386; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
2478; PWR7-NEXT:    vsrh 3, 2, 3
2479; PWR7-NEXT:    addi 3, 3, .LCPI25_1@toc@l
2480; PWR7-NEXT:    xxland 35, 35, 0
2481; PWR7-NEXT:    lxvw4x 0, 0, 3
2482; PWR7-NEXT:    vsubuhm 2, 2, 3
2483; PWR7-NEXT:    vsrh 3, 2, 4
2484; PWR7-NEXT:    xxland 34, 34, 0
2485; PWR7-NEXT:    vspltish 4, 4
2486; PWR7-NEXT:    xxland 35, 35, 0
2487; PWR7-NEXT:    vadduhm 2, 2, 3
2488; PWR7-NEXT:    vsrh 3, 2, 4
2489; PWR7-NEXT:    vxor 4, 4, 4
2490; PWR7-NEXT:    vadduhm 2, 2, 3
2491; PWR7-NEXT:    vspltisb 3, 1
2492; PWR7-NEXT:    xxland 34, 34, 37
2493; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2494; PWR7-NEXT:    vspltish 3, 8
2495; PWR7-NEXT:    vsrh 2, 2, 3
2496; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
2588; PWR7-NEXT:    vsrh 3, 2, 3
2589; PWR7-NEXT:    addi 3, 3, .LCPI26_1@toc@l
2590; PWR7-NEXT:    xxland 35, 35, 0
2591; PWR7-NEXT:    lxvw4x 0, 0, 3
2592; PWR7-NEXT:    vsubuhm 2, 2, 3
2593; PWR7-NEXT:    vsrh 3, 2, 4
2594; PWR7-NEXT:    xxland 34, 34, 0
2595; PWR7-NEXT:    vspltish 4, 4
2596; PWR7-NEXT:    xxland 35, 35, 0
2597; PWR7-NEXT:    vadduhm 2, 2, 3
2598; PWR7-NEXT:    vsrh 3, 2, 4
2599; PWR7-NEXT:    vxor 4, 4, 4
2600; PWR7-NEXT:    vadduhm 2, 2, 3
2601; PWR7-NEXT:    vspltisb 3, 1
2602; PWR7-NEXT:    xxland 34, 34, 37
2603; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2604; PWR7-NEXT:    vspltish 3, 8
2605; PWR7-NEXT:    vsrh 2, 2, 3
2606; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
2700; PWR7-NEXT:    vsrh 3, 2, 3
2701; PWR7-NEXT:    addi 3, 3, .LCPI27_1@toc@l
2702; PWR7-NEXT:    xxland 35, 35, 0
2703; PWR7-NEXT:    lxvw4x 0, 0, 3
2704; PWR7-NEXT:    vsubuhm 2, 2, 3
2705; PWR7-NEXT:    vsrh 3, 2, 4
2706; PWR7-NEXT:    xxland 34, 34, 0
2707; PWR7-NEXT:    vspltish 4, 4
2708; PWR7-NEXT:    xxland 35, 35, 0
2709; PWR7-NEXT:    vadduhm 2, 2, 3
2710; PWR7-NEXT:    vsrh 3, 2, 4
2711; PWR7-NEXT:    vxor 4, 4, 4
2712; PWR7-NEXT:    vadduhm 2, 2, 3
2713; PWR7-NEXT:    vspltisb 3, 1
2714; PWR7-NEXT:    xxland 34, 34, 37
2715; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2716; PWR7-NEXT:    vspltish 3, 8
2717; PWR7-NEXT:    vsrh 2, 2, 3
2718; PWR7-NEXT:    vspltish 3, 9
2719; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
2813; PWR7-NEXT:    vsrh 3, 2, 3
2814; PWR7-NEXT:    addi 3, 3, .LCPI28_1@toc@l
2815; PWR7-NEXT:    xxland 35, 35, 0
2816; PWR7-NEXT:    lxvw4x 0, 0, 3
2817; PWR7-NEXT:    vsubuhm 2, 2, 3
2818; PWR7-NEXT:    vsrh 3, 2, 4
2819; PWR7-NEXT:    xxland 34, 34, 0
2820; PWR7-NEXT:    vspltish 4, 4
2821; PWR7-NEXT:    xxland 35, 35, 0
2822; PWR7-NEXT:    vadduhm 2, 2, 3
2823; PWR7-NEXT:    vsrh 3, 2, 4
2824; PWR7-NEXT:    vxor 4, 4, 4
2825; PWR7-NEXT:    vadduhm 2, 2, 3
2826; PWR7-NEXT:    vspltisb 3, 1
2827; PWR7-NEXT:    xxland 34, 34, 37
2828; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2829; PWR7-NEXT:    vspltish 3, 8
2830; PWR7-NEXT:    vsrh 2, 2, 3
2831; PWR7-NEXT:    vspltish 3, 9
2832; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
2926; PWR7-NEXT:    vsrh 3, 2, 3
2927; PWR7-NEXT:    addi 3, 3, .LCPI29_1@toc@l
2928; PWR7-NEXT:    xxland 35, 35, 0
2929; PWR7-NEXT:    lxvw4x 0, 0, 3
2930; PWR7-NEXT:    vsubuhm 2, 2, 3
2931; PWR7-NEXT:    vsrh 3, 2, 4
2932; PWR7-NEXT:    xxland 34, 34, 0
2933; PWR7-NEXT:    vspltish 4, 4
2934; PWR7-NEXT:    xxland 35, 35, 0
2935; PWR7-NEXT:    vadduhm 2, 2, 3
2936; PWR7-NEXT:    vsrh 3, 2, 4
2937; PWR7-NEXT:    vxor 4, 4, 4
2938; PWR7-NEXT:    vadduhm 2, 2, 3
2939; PWR7-NEXT:    vspltisb 3, 1
2940; PWR7-NEXT:    xxland 34, 34, 37
2941; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
2942; PWR7-NEXT:    vspltish 3, 8
2943; PWR7-NEXT:    vsrh 2, 2, 3
2944; PWR7-NEXT:    vspltish 3, 10
2945; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
3039; PWR7-NEXT:    vsrh 3, 2, 3
3040; PWR7-NEXT:    addi 3, 3, .LCPI30_1@toc@l
3041; PWR7-NEXT:    xxland 35, 35, 0
3042; PWR7-NEXT:    lxvw4x 0, 0, 3
3043; PWR7-NEXT:    vsubuhm 2, 2, 3
3044; PWR7-NEXT:    vsrh 3, 2, 4
3045; PWR7-NEXT:    xxland 34, 34, 0
3046; PWR7-NEXT:    vspltish 4, 4
3047; PWR7-NEXT:    xxland 35, 35, 0
3048; PWR7-NEXT:    vadduhm 2, 2, 3
3049; PWR7-NEXT:    vsrh 3, 2, 4
3050; PWR7-NEXT:    vxor 4, 4, 4
3051; PWR7-NEXT:    vadduhm 2, 2, 3
3052; PWR7-NEXT:    vspltisb 3, 1
3053; PWR7-NEXT:    xxland 34, 34, 37
3054; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3055; PWR7-NEXT:    vspltish 3, 8
3056; PWR7-NEXT:    vsrh 2, 2, 3
3057; PWR7-NEXT:    vspltish 3, 10
3058; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
3152; PWR7-NEXT:    vsrh 3, 2, 3
3153; PWR7-NEXT:    addi 3, 3, .LCPI31_1@toc@l
3154; PWR7-NEXT:    xxland 35, 35, 0
3155; PWR7-NEXT:    lxvw4x 0, 0, 3
3156; PWR7-NEXT:    vsubuhm 2, 2, 3
3157; PWR7-NEXT:    vsrh 3, 2, 4
3158; PWR7-NEXT:    xxland 34, 34, 0
3159; PWR7-NEXT:    vspltish 4, 4
3160; PWR7-NEXT:    xxland 35, 35, 0
3161; PWR7-NEXT:    vadduhm 2, 2, 3
3162; PWR7-NEXT:    vsrh 3, 2, 4
3163; PWR7-NEXT:    vxor 4, 4, 4
3164; PWR7-NEXT:    vadduhm 2, 2, 3
3165; PWR7-NEXT:    vspltisb 3, 1
3166; PWR7-NEXT:    xxland 34, 34, 37
3167; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3168; PWR7-NEXT:    vspltish 3, 8
3169; PWR7-NEXT:    vsrh 2, 2, 3
3170; PWR7-NEXT:    vspltish 3, 11
3171; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
3265; PWR7-NEXT:    vsrh 3, 2, 3
3266; PWR7-NEXT:    addi 3, 3, .LCPI32_1@toc@l
3267; PWR7-NEXT:    xxland 35, 35, 0
3268; PWR7-NEXT:    lxvw4x 0, 0, 3
3269; PWR7-NEXT:    vsubuhm 2, 2, 3
3270; PWR7-NEXT:    vsrh 3, 2, 4
3271; PWR7-NEXT:    xxland 34, 34, 0
3272; PWR7-NEXT:    vspltish 4, 4
3273; PWR7-NEXT:    xxland 35, 35, 0
3274; PWR7-NEXT:    vadduhm 2, 2, 3
3275; PWR7-NEXT:    vsrh 3, 2, 4
3276; PWR7-NEXT:    vxor 4, 4, 4
3277; PWR7-NEXT:    vadduhm 2, 2, 3
3278; PWR7-NEXT:    vspltisb 3, 1
3279; PWR7-NEXT:    xxland 34, 34, 37
3280; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3281; PWR7-NEXT:    vspltish 3, 8
3282; PWR7-NEXT:    vsrh 2, 2, 3
3283; PWR7-NEXT:    vspltish 3, 11
3284; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
3378; PWR7-NEXT:    vsrh 3, 2, 3
3379; PWR7-NEXT:    addi 3, 3, .LCPI33_1@toc@l
3380; PWR7-NEXT:    xxland 35, 35, 0
3381; PWR7-NEXT:    lxvw4x 0, 0, 3
3382; PWR7-NEXT:    vsubuhm 2, 2, 3
3383; PWR7-NEXT:    vsrh 3, 2, 4
3384; PWR7-NEXT:    xxland 34, 34, 0
3385; PWR7-NEXT:    vspltish 4, 4
3386; PWR7-NEXT:    xxland 35, 35, 0
3387; PWR7-NEXT:    vadduhm 2, 2, 3
3388; PWR7-NEXT:    vsrh 3, 2, 4
3389; PWR7-NEXT:    vxor 4, 4, 4
3390; PWR7-NEXT:    vadduhm 2, 2, 3
3391; PWR7-NEXT:    vspltisb 3, 1
3392; PWR7-NEXT:    xxland 34, 34, 37
3393; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3394; PWR7-NEXT:    vspltish 3, 8
3395; PWR7-NEXT:    vsrh 2, 2, 3
3396; PWR7-NEXT:    vspltish 3, 12
3397; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
3491; PWR7-NEXT:    vsrh 3, 2, 3
3492; PWR7-NEXT:    addi 3, 3, .LCPI34_1@toc@l
3493; PWR7-NEXT:    xxland 35, 35, 0
3494; PWR7-NEXT:    lxvw4x 0, 0, 3
3495; PWR7-NEXT:    vsubuhm 2, 2, 3
3496; PWR7-NEXT:    vsrh 3, 2, 4
3497; PWR7-NEXT:    xxland 34, 34, 0
3498; PWR7-NEXT:    vspltish 4, 4
3499; PWR7-NEXT:    xxland 35, 35, 0
3500; PWR7-NEXT:    vadduhm 2, 2, 3
3501; PWR7-NEXT:    vsrh 3, 2, 4
3502; PWR7-NEXT:    vxor 4, 4, 4
3503; PWR7-NEXT:    vadduhm 2, 2, 3
3504; PWR7-NEXT:    vspltisb 3, 1
3505; PWR7-NEXT:    xxland 34, 34, 37
3506; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3507; PWR7-NEXT:    vspltish 3, 8
3508; PWR7-NEXT:    vsrh 2, 2, 3
3509; PWR7-NEXT:    vspltish 3, 12
3510; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
3604; PWR7-NEXT:    vsrh 3, 2, 3
3605; PWR7-NEXT:    addi 3, 3, .LCPI35_1@toc@l
3606; PWR7-NEXT:    xxland 35, 35, 0
3607; PWR7-NEXT:    lxvw4x 0, 0, 3
3608; PWR7-NEXT:    vsubuhm 2, 2, 3
3609; PWR7-NEXT:    vsrh 3, 2, 4
3610; PWR7-NEXT:    xxland 34, 34, 0
3611; PWR7-NEXT:    vspltish 4, 4
3612; PWR7-NEXT:    xxland 35, 35, 0
3613; PWR7-NEXT:    vadduhm 2, 2, 3
3614; PWR7-NEXT:    vsrh 3, 2, 4
3615; PWR7-NEXT:    vxor 4, 4, 4
3616; PWR7-NEXT:    vadduhm 2, 2, 3
3617; PWR7-NEXT:    vspltisb 3, 1
3618; PWR7-NEXT:    xxland 34, 34, 37
3619; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3620; PWR7-NEXT:    vspltish 3, 8
3621; PWR7-NEXT:    vsrh 2, 2, 3
3622; PWR7-NEXT:    vspltish 3, 13
3623; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
3717; PWR7-NEXT:    vsrh 3, 2, 3
3718; PWR7-NEXT:    addi 3, 3, .LCPI36_1@toc@l
3719; PWR7-NEXT:    xxland 35, 35, 0
3720; PWR7-NEXT:    lxvw4x 0, 0, 3
3721; PWR7-NEXT:    vsubuhm 2, 2, 3
3722; PWR7-NEXT:    vsrh 3, 2, 4
3723; PWR7-NEXT:    xxland 34, 34, 0
3724; PWR7-NEXT:    vspltish 4, 4
3725; PWR7-NEXT:    xxland 35, 35, 0
3726; PWR7-NEXT:    vadduhm 2, 2, 3
3727; PWR7-NEXT:    vsrh 3, 2, 4
3728; PWR7-NEXT:    vxor 4, 4, 4
3729; PWR7-NEXT:    vadduhm 2, 2, 3
3730; PWR7-NEXT:    vspltisb 3, 1
3731; PWR7-NEXT:    xxland 34, 34, 37
3732; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3733; PWR7-NEXT:    vspltish 3, 8
3734; PWR7-NEXT:    vsrh 2, 2, 3
3735; PWR7-NEXT:    vspltish 3, 13
3736; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
3830; PWR7-NEXT:    vsrh 3, 2, 3
3831; PWR7-NEXT:    addi 3, 3, .LCPI37_1@toc@l
3832; PWR7-NEXT:    xxland 35, 35, 0
3833; PWR7-NEXT:    lxvw4x 0, 0, 3
3834; PWR7-NEXT:    vsubuhm 2, 2, 3
3835; PWR7-NEXT:    vsrh 3, 2, 4
3836; PWR7-NEXT:    xxland 34, 34, 0
3837; PWR7-NEXT:    vspltish 4, 4
3838; PWR7-NEXT:    xxland 35, 35, 0
3839; PWR7-NEXT:    vadduhm 2, 2, 3
3840; PWR7-NEXT:    vsrh 3, 2, 4
3841; PWR7-NEXT:    vxor 4, 4, 4
3842; PWR7-NEXT:    vadduhm 2, 2, 3
3843; PWR7-NEXT:    vspltisb 3, 1
3844; PWR7-NEXT:    xxland 34, 34, 37
3845; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3846; PWR7-NEXT:    vspltish 3, 8
3847; PWR7-NEXT:    vsrh 2, 2, 3
3848; PWR7-NEXT:    vspltish 3, 14
3849; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vspltisb 5, 15
3943; PWR7-NEXT:    vsrh 3, 2, 3
3944; PWR7-NEXT:    addi 3, 3, .LCPI38_1@toc@l
3945; PWR7-NEXT:    xxland 35, 35, 0
3946; PWR7-NEXT:    lxvw4x 0, 0, 3
3947; PWR7-NEXT:    vsubuhm 2, 2, 3
3948; PWR7-NEXT:    vsrh 3, 2, 4
3949; PWR7-NEXT:    xxland 34, 34, 0
3950; PWR7-NEXT:    vspltish 4, 4
3951; PWR7-NEXT:    xxland 35, 35, 0
3952; PWR7-NEXT:    vadduhm 2, 2, 3
3953; PWR7-NEXT:    vsrh 3, 2, 4
3954; PWR7-NEXT:    vxor 4, 4, 4
3955; PWR7-NEXT:    vadduhm 2, 2, 3
3956; PWR7-NEXT:    vspltisb 3, 1
3957; PWR7-NEXT:    xxland 34, 34, 37
3958; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
3959; PWR7-NEXT:    vspltish 3, 8
3960; PWR7-NEXT:    vsrh 2, 2, 3
3961; PWR7-NEXT:    vspltish 3, 14
3962; PWR7-NEXT:    vcmpgtuh 2, 2, 3
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:    vspltisb 5, 15
4056; PWR7-NEXT:    vsrh 3, 2, 3
4057; PWR7-NEXT:    addi 3, 3, .LCPI39_1@toc@l
4058; PWR7-NEXT:    xxland 35, 35, 0
4059; PWR7-NEXT:    lxvw4x 0, 0, 3
4060; PWR7-NEXT:    vsubuhm 2, 2, 3
4061; PWR7-NEXT:    vsrh 3, 2, 4
4062; PWR7-NEXT:    xxland 34, 34, 0
4063; PWR7-NEXT:    vspltish 4, 4
4064; PWR7-NEXT:    xxland 35, 35, 0
4065; PWR7-NEXT:    vadduhm 2, 2, 3
4066; PWR7-NEXT:    vsrh 3, 2, 4
4067; PWR7-NEXT:    vxor 4, 4, 4
4068; PWR7-NEXT:    vadduhm 2, 2, 3
4069; PWR7-NEXT:    vspltisb 3, 1
4070; PWR7-NEXT:    xxland 34, 34, 37
4071; PWR7-NEXT:    vmladduhm 2, 2, 3, 4
4072; PWR7-NEXT:    vspltish 3, 8
4073; PWR7-NEXT:    vsrh 2, 2, 3
4074; PWR7-NEXT:    vspltish 3, 15
4075; PWR7-NEXT:    vcmpgtuh 2, 3, 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:    vsrw 3, 2, 3
4277; PWR7-NEXT:    addi 3, 3, .LCPI42_1@toc@l
4278; PWR7-NEXT:    vspltisw 0, -16
4279; PWR7-NEXT:    vspltisb 1, 15
4280; PWR7-NEXT:    xxland 35, 35, 0
4281; PWR7-NEXT:    lxvw4x 0, 0, 3
4282; PWR7-NEXT:    vsubuwm 2, 2, 3
4283; PWR7-NEXT:    vsrw 3, 2, 4
4284; PWR7-NEXT:    xxland 34, 34, 0
4285; PWR7-NEXT:    xxland 35, 35, 0
4286; PWR7-NEXT:    vadduwm 2, 2, 3
4287; PWR7-NEXT:    vsrw 3, 2, 5
4288; PWR7-NEXT:    vspltisb 5, 1
4289; PWR7-NEXT:    vrlw 6, 5, 0
4290; PWR7-NEXT:    vadduwm 2, 2, 3
4291; PWR7-NEXT:    xxlxor 35, 35, 35
4292; PWR7-NEXT:    xxland 34, 34, 33
4293; PWR7-NEXT:    vmsumuhm 3, 2, 6, 3
4294; PWR7-NEXT:    vmulouh 2, 2, 5
4295; PWR7-NEXT:    vspltisw 5, 12
4296; PWR7-NEXT:    vslw 3, 3, 0
4297; PWR7-NEXT:    vadduwm 2, 2, 3
4298; PWR7-NEXT:    vadduwm 3, 5, 5
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, -16
4406; PWR7-NEXT:    vsrw 3, 2, 3
4407; PWR7-NEXT:    addi 3, 3, .LCPI43_1@toc@l
4408; PWR7-NEXT:    vspltisb 0, 15
4409; PWR7-NEXT:    xxland 35, 35, 0
4410; PWR7-NEXT:    lxvw4x 0, 0, 3
4411; PWR7-NEXT:    vsubuwm 2, 2, 3
4412; PWR7-NEXT:    vsrw 3, 2, 4
4413; PWR7-NEXT:    xxland 34, 34, 0
4414; PWR7-NEXT:    vspltisw 4, 4
4415; PWR7-NEXT:    xxland 35, 35, 0
4416; PWR7-NEXT:    vadduwm 2, 2, 3
4417; PWR7-NEXT:    vsrw 3, 2, 4
4418; PWR7-NEXT:    vspltisb 4, 1
4419; PWR7-NEXT:    vrlw 1, 4, 5
4420; PWR7-NEXT:    vadduwm 2, 2, 3
4421; PWR7-NEXT:    xxlxor 35, 35, 35
4422; PWR7-NEXT:    xxland 34, 34, 32
4423; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
4424; PWR7-NEXT:    vmulouh 2, 2, 4
4425; PWR7-NEXT:    vspltisw 4, 12
4426; PWR7-NEXT:    vslw 3, 3, 5
4427; PWR7-NEXT:    vadduwm 2, 2, 3
4428; PWR7-NEXT:    vadduwm 3, 4, 4
4429; PWR7-NEXT:    vsrw 2, 2, 3
4430; PWR7-NEXT:    vspltisw 3, 3
4431; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
4537; PWR7-NEXT:    vsrw 3, 2, 3
4538; PWR7-NEXT:    addi 3, 3, .LCPI44_1@toc@l
4539; PWR7-NEXT:    vspltisb 0, 15
4540; PWR7-NEXT:    xxland 35, 35, 0
4541; PWR7-NEXT:    lxvw4x 0, 0, 3
4542; PWR7-NEXT:    vsubuwm 2, 2, 3
4543; PWR7-NEXT:    vsrw 3, 2, 4
4544; PWR7-NEXT:    xxland 34, 34, 0
4545; PWR7-NEXT:    vspltisw 4, 4
4546; PWR7-NEXT:    xxland 35, 35, 0
4547; PWR7-NEXT:    vadduwm 2, 2, 3
4548; PWR7-NEXT:    vsrw 3, 2, 4
4549; PWR7-NEXT:    vspltisb 4, 1
4550; PWR7-NEXT:    vrlw 1, 4, 5
4551; PWR7-NEXT:    vadduwm 2, 2, 3
4552; PWR7-NEXT:    xxlxor 35, 35, 35
4553; PWR7-NEXT:    xxland 34, 34, 32
4554; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
4555; PWR7-NEXT:    vmulouh 2, 2, 4
4556; PWR7-NEXT:    vspltisw 4, 12
4557; PWR7-NEXT:    vslw 3, 3, 5
4558; PWR7-NEXT:    vadduwm 2, 2, 3
4559; PWR7-NEXT:    vadduwm 3, 4, 4
4560; PWR7-NEXT:    vsrw 2, 2, 3
4561; PWR7-NEXT:    vspltisw 3, 3
4562; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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:    vspltisb 5, 1
4666; PWR7-NEXT:    vsrw 3, 2, 3
4667; PWR7-NEXT:    addi 3, 3, .LCPI45_1@toc@l
4668; PWR7-NEXT:    vspltisw 0, -16
4669; PWR7-NEXT:    vspltisb 1, 15
4670; PWR7-NEXT:    vrlw 6, 5, 0
4671; PWR7-NEXT:    xxland 35, 35, 0
4672; PWR7-NEXT:    lxvw4x 0, 0, 3
4673; PWR7-NEXT:    vsubuwm 2, 2, 3
4674; PWR7-NEXT:    vsrw 3, 2, 4
4675; PWR7-NEXT:    xxland 34, 34, 0
4676; PWR7-NEXT:    vspltisw 4, 4
4677; PWR7-NEXT:    xxland 35, 35, 0
4678; PWR7-NEXT:    vadduwm 2, 2, 3
4679; PWR7-NEXT:    vsrw 3, 2, 4
4680; PWR7-NEXT:    vadduwm 2, 2, 3
4681; PWR7-NEXT:    xxlxor 35, 35, 35
4682; PWR7-NEXT:    xxland 34, 34, 33
4683; PWR7-NEXT:    vmsumuhm 3, 2, 6, 3
4684; PWR7-NEXT:    vmulouh 2, 2, 5
4685; PWR7-NEXT:    vspltisw 5, 12
4686; PWR7-NEXT:    vslw 3, 3, 0
4687; PWR7-NEXT:    vadduwm 2, 2, 3
4688; PWR7-NEXT:    vadduwm 3, 5, 5
4689; PWR7-NEXT:    vsrw 2, 2, 3
4690; PWR7-NEXT:    vcmpgtuw 2, 4, 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:    vspltisb 5, 1
4794; PWR7-NEXT:    vsrw 3, 2, 3
4795; PWR7-NEXT:    addi 3, 3, .LCPI46_1@toc@l
4796; PWR7-NEXT:    vspltisw 0, -16
4797; PWR7-NEXT:    vspltisb 1, 15
4798; PWR7-NEXT:    vrlw 6, 5, 0
4799; PWR7-NEXT:    xxland 35, 35, 0
4800; PWR7-NEXT:    lxvw4x 0, 0, 3
4801; PWR7-NEXT:    vsubuwm 2, 2, 3
4802; PWR7-NEXT:    vsrw 3, 2, 4
4803; PWR7-NEXT:    xxland 34, 34, 0
4804; PWR7-NEXT:    vspltisw 4, 4
4805; PWR7-NEXT:    xxland 35, 35, 0
4806; PWR7-NEXT:    vadduwm 2, 2, 3
4807; PWR7-NEXT:    vsrw 3, 2, 4
4808; PWR7-NEXT:    vadduwm 2, 2, 3
4809; PWR7-NEXT:    xxlxor 35, 35, 35
4810; PWR7-NEXT:    xxland 34, 34, 33
4811; PWR7-NEXT:    vmsumuhm 3, 2, 6, 3
4812; PWR7-NEXT:    vmulouh 2, 2, 5
4813; PWR7-NEXT:    vspltisw 5, 12
4814; PWR7-NEXT:    vslw 3, 3, 0
4815; PWR7-NEXT:    vadduwm 2, 2, 3
4816; PWR7-NEXT:    vadduwm 3, 5, 5
4817; PWR7-NEXT:    vsrw 2, 2, 3
4818; PWR7-NEXT:    vcmpgtuw 2, 2, 4
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, -16
4924; PWR7-NEXT:    vsrw 3, 2, 3
4925; PWR7-NEXT:    addi 3, 3, .LCPI47_1@toc@l
4926; PWR7-NEXT:    vspltisb 0, 15
4927; PWR7-NEXT:    xxland 35, 35, 0
4928; PWR7-NEXT:    lxvw4x 0, 0, 3
4929; PWR7-NEXT:    vsubuwm 2, 2, 3
4930; PWR7-NEXT:    vsrw 3, 2, 4
4931; PWR7-NEXT:    xxland 34, 34, 0
4932; PWR7-NEXT:    vspltisw 4, 4
4933; PWR7-NEXT:    xxland 35, 35, 0
4934; PWR7-NEXT:    vadduwm 2, 2, 3
4935; PWR7-NEXT:    vsrw 3, 2, 4
4936; PWR7-NEXT:    vspltisb 4, 1
4937; PWR7-NEXT:    vrlw 1, 4, 5
4938; PWR7-NEXT:    vadduwm 2, 2, 3
4939; PWR7-NEXT:    xxlxor 35, 35, 35
4940; PWR7-NEXT:    xxland 34, 34, 32
4941; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
4942; PWR7-NEXT:    vmulouh 2, 2, 4
4943; PWR7-NEXT:    vspltisw 4, 12
4944; PWR7-NEXT:    vslw 3, 3, 5
4945; PWR7-NEXT:    vadduwm 2, 2, 3
4946; PWR7-NEXT:    vadduwm 3, 4, 4
4947; PWR7-NEXT:    vsrw 2, 2, 3
4948; PWR7-NEXT:    vspltisw 3, 5
4949; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
5055; PWR7-NEXT:    vsrw 3, 2, 3
5056; PWR7-NEXT:    addi 3, 3, .LCPI48_1@toc@l
5057; PWR7-NEXT:    vspltisb 0, 15
5058; PWR7-NEXT:    xxland 35, 35, 0
5059; PWR7-NEXT:    lxvw4x 0, 0, 3
5060; PWR7-NEXT:    vsubuwm 2, 2, 3
5061; PWR7-NEXT:    vsrw 3, 2, 4
5062; PWR7-NEXT:    xxland 34, 34, 0
5063; PWR7-NEXT:    vspltisw 4, 4
5064; PWR7-NEXT:    xxland 35, 35, 0
5065; PWR7-NEXT:    vadduwm 2, 2, 3
5066; PWR7-NEXT:    vsrw 3, 2, 4
5067; PWR7-NEXT:    vspltisb 4, 1
5068; PWR7-NEXT:    vrlw 1, 4, 5
5069; PWR7-NEXT:    vadduwm 2, 2, 3
5070; PWR7-NEXT:    xxlxor 35, 35, 35
5071; PWR7-NEXT:    xxland 34, 34, 32
5072; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5073; PWR7-NEXT:    vmulouh 2, 2, 4
5074; PWR7-NEXT:    vspltisw 4, 12
5075; PWR7-NEXT:    vslw 3, 3, 5
5076; PWR7-NEXT:    vadduwm 2, 2, 3
5077; PWR7-NEXT:    vadduwm 3, 4, 4
5078; PWR7-NEXT:    vsrw 2, 2, 3
5079; PWR7-NEXT:    vspltisw 3, 5
5080; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
5186; PWR7-NEXT:    vsrw 3, 2, 3
5187; PWR7-NEXT:    addi 3, 3, .LCPI49_1@toc@l
5188; PWR7-NEXT:    vspltisb 0, 15
5189; PWR7-NEXT:    xxland 35, 35, 0
5190; PWR7-NEXT:    lxvw4x 0, 0, 3
5191; PWR7-NEXT:    vsubuwm 2, 2, 3
5192; PWR7-NEXT:    vsrw 3, 2, 4
5193; PWR7-NEXT:    xxland 34, 34, 0
5194; PWR7-NEXT:    vspltisw 4, 4
5195; PWR7-NEXT:    xxland 35, 35, 0
5196; PWR7-NEXT:    vadduwm 2, 2, 3
5197; PWR7-NEXT:    vsrw 3, 2, 4
5198; PWR7-NEXT:    vspltisb 4, 1
5199; PWR7-NEXT:    vrlw 1, 4, 5
5200; PWR7-NEXT:    vadduwm 2, 2, 3
5201; PWR7-NEXT:    xxlxor 35, 35, 35
5202; PWR7-NEXT:    xxland 34, 34, 32
5203; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5204; PWR7-NEXT:    vmulouh 2, 2, 4
5205; PWR7-NEXT:    vspltisw 4, 12
5206; PWR7-NEXT:    vslw 3, 3, 5
5207; PWR7-NEXT:    vadduwm 2, 2, 3
5208; PWR7-NEXT:    vadduwm 3, 4, 4
5209; PWR7-NEXT:    vsrw 2, 2, 3
5210; PWR7-NEXT:    vspltisw 3, 6
5211; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
5317; PWR7-NEXT:    vsrw 3, 2, 3
5318; PWR7-NEXT:    addi 3, 3, .LCPI50_1@toc@l
5319; PWR7-NEXT:    vspltisb 0, 15
5320; PWR7-NEXT:    xxland 35, 35, 0
5321; PWR7-NEXT:    lxvw4x 0, 0, 3
5322; PWR7-NEXT:    vsubuwm 2, 2, 3
5323; PWR7-NEXT:    vsrw 3, 2, 4
5324; PWR7-NEXT:    xxland 34, 34, 0
5325; PWR7-NEXT:    vspltisw 4, 4
5326; PWR7-NEXT:    xxland 35, 35, 0
5327; PWR7-NEXT:    vadduwm 2, 2, 3
5328; PWR7-NEXT:    vsrw 3, 2, 4
5329; PWR7-NEXT:    vspltisb 4, 1
5330; PWR7-NEXT:    vrlw 1, 4, 5
5331; PWR7-NEXT:    vadduwm 2, 2, 3
5332; PWR7-NEXT:    xxlxor 35, 35, 35
5333; PWR7-NEXT:    xxland 34, 34, 32
5334; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5335; PWR7-NEXT:    vmulouh 2, 2, 4
5336; PWR7-NEXT:    vspltisw 4, 12
5337; PWR7-NEXT:    vslw 3, 3, 5
5338; PWR7-NEXT:    vadduwm 2, 2, 3
5339; PWR7-NEXT:    vadduwm 3, 4, 4
5340; PWR7-NEXT:    vsrw 2, 2, 3
5341; PWR7-NEXT:    vspltisw 3, 6
5342; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
5448; PWR7-NEXT:    vsrw 3, 2, 3
5449; PWR7-NEXT:    addi 3, 3, .LCPI51_1@toc@l
5450; PWR7-NEXT:    vspltisb 0, 15
5451; PWR7-NEXT:    xxland 35, 35, 0
5452; PWR7-NEXT:    lxvw4x 0, 0, 3
5453; PWR7-NEXT:    vsubuwm 2, 2, 3
5454; PWR7-NEXT:    vsrw 3, 2, 4
5455; PWR7-NEXT:    xxland 34, 34, 0
5456; PWR7-NEXT:    vspltisw 4, 4
5457; PWR7-NEXT:    xxland 35, 35, 0
5458; PWR7-NEXT:    vadduwm 2, 2, 3
5459; PWR7-NEXT:    vsrw 3, 2, 4
5460; PWR7-NEXT:    vspltisb 4, 1
5461; PWR7-NEXT:    vrlw 1, 4, 5
5462; PWR7-NEXT:    vadduwm 2, 2, 3
5463; PWR7-NEXT:    xxlxor 35, 35, 35
5464; PWR7-NEXT:    xxland 34, 34, 32
5465; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5466; PWR7-NEXT:    vmulouh 2, 2, 4
5467; PWR7-NEXT:    vspltisw 4, 12
5468; PWR7-NEXT:    vslw 3, 3, 5
5469; PWR7-NEXT:    vadduwm 2, 2, 3
5470; PWR7-NEXT:    vadduwm 3, 4, 4
5471; PWR7-NEXT:    vsrw 2, 2, 3
5472; PWR7-NEXT:    vspltisw 3, 7
5473; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
5579; PWR7-NEXT:    vsrw 3, 2, 3
5580; PWR7-NEXT:    addi 3, 3, .LCPI52_1@toc@l
5581; PWR7-NEXT:    vspltisb 0, 15
5582; PWR7-NEXT:    xxland 35, 35, 0
5583; PWR7-NEXT:    lxvw4x 0, 0, 3
5584; PWR7-NEXT:    vsubuwm 2, 2, 3
5585; PWR7-NEXT:    vsrw 3, 2, 4
5586; PWR7-NEXT:    xxland 34, 34, 0
5587; PWR7-NEXT:    vspltisw 4, 4
5588; PWR7-NEXT:    xxland 35, 35, 0
5589; PWR7-NEXT:    vadduwm 2, 2, 3
5590; PWR7-NEXT:    vsrw 3, 2, 4
5591; PWR7-NEXT:    vspltisb 4, 1
5592; PWR7-NEXT:    vrlw 1, 4, 5
5593; PWR7-NEXT:    vadduwm 2, 2, 3
5594; PWR7-NEXT:    xxlxor 35, 35, 35
5595; PWR7-NEXT:    xxland 34, 34, 32
5596; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5597; PWR7-NEXT:    vmulouh 2, 2, 4
5598; PWR7-NEXT:    vspltisw 4, 12
5599; PWR7-NEXT:    vslw 3, 3, 5
5600; PWR7-NEXT:    vadduwm 2, 2, 3
5601; PWR7-NEXT:    vadduwm 3, 4, 4
5602; PWR7-NEXT:    vsrw 2, 2, 3
5603; PWR7-NEXT:    vspltisw 3, 7
5604; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
5710; PWR7-NEXT:    vsrw 3, 2, 3
5711; PWR7-NEXT:    addi 3, 3, .LCPI53_1@toc@l
5712; PWR7-NEXT:    vspltisb 0, 15
5713; PWR7-NEXT:    xxland 35, 35, 0
5714; PWR7-NEXT:    lxvw4x 0, 0, 3
5715; PWR7-NEXT:    vsubuwm 2, 2, 3
5716; PWR7-NEXT:    vsrw 3, 2, 4
5717; PWR7-NEXT:    xxland 34, 34, 0
5718; PWR7-NEXT:    vspltisw 4, 4
5719; PWR7-NEXT:    xxland 35, 35, 0
5720; PWR7-NEXT:    vadduwm 2, 2, 3
5721; PWR7-NEXT:    vsrw 3, 2, 4
5722; PWR7-NEXT:    vspltisb 4, 1
5723; PWR7-NEXT:    vrlw 1, 4, 5
5724; PWR7-NEXT:    vadduwm 2, 2, 3
5725; PWR7-NEXT:    xxlxor 35, 35, 35
5726; PWR7-NEXT:    xxland 34, 34, 32
5727; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5728; PWR7-NEXT:    vmulouh 2, 2, 4
5729; PWR7-NEXT:    vspltisw 4, 12
5730; PWR7-NEXT:    vslw 3, 3, 5
5731; PWR7-NEXT:    vadduwm 2, 2, 3
5732; PWR7-NEXT:    vadduwm 3, 4, 4
5733; PWR7-NEXT:    vsrw 2, 2, 3
5734; PWR7-NEXT:    vspltisw 3, 8
5735; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
5841; PWR7-NEXT:    vsrw 3, 2, 3
5842; PWR7-NEXT:    addi 3, 3, .LCPI54_1@toc@l
5843; PWR7-NEXT:    vspltisb 0, 15
5844; PWR7-NEXT:    xxland 35, 35, 0
5845; PWR7-NEXT:    lxvw4x 0, 0, 3
5846; PWR7-NEXT:    vsubuwm 2, 2, 3
5847; PWR7-NEXT:    vsrw 3, 2, 4
5848; PWR7-NEXT:    xxland 34, 34, 0
5849; PWR7-NEXT:    vspltisw 4, 4
5850; PWR7-NEXT:    xxland 35, 35, 0
5851; PWR7-NEXT:    vadduwm 2, 2, 3
5852; PWR7-NEXT:    vsrw 3, 2, 4
5853; PWR7-NEXT:    vspltisb 4, 1
5854; PWR7-NEXT:    vrlw 1, 4, 5
5855; PWR7-NEXT:    vadduwm 2, 2, 3
5856; PWR7-NEXT:    xxlxor 35, 35, 35
5857; PWR7-NEXT:    xxland 34, 34, 32
5858; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5859; PWR7-NEXT:    vmulouh 2, 2, 4
5860; PWR7-NEXT:    vspltisw 4, 12
5861; PWR7-NEXT:    vslw 3, 3, 5
5862; PWR7-NEXT:    vadduwm 2, 2, 3
5863; PWR7-NEXT:    vadduwm 3, 4, 4
5864; PWR7-NEXT:    vsrw 2, 2, 3
5865; PWR7-NEXT:    vspltisw 3, 8
5866; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
5972; PWR7-NEXT:    vsrw 3, 2, 3
5973; PWR7-NEXT:    addi 3, 3, .LCPI55_1@toc@l
5974; PWR7-NEXT:    vspltisb 0, 15
5975; PWR7-NEXT:    xxland 35, 35, 0
5976; PWR7-NEXT:    lxvw4x 0, 0, 3
5977; PWR7-NEXT:    vsubuwm 2, 2, 3
5978; PWR7-NEXT:    vsrw 3, 2, 4
5979; PWR7-NEXT:    xxland 34, 34, 0
5980; PWR7-NEXT:    vspltisw 4, 4
5981; PWR7-NEXT:    xxland 35, 35, 0
5982; PWR7-NEXT:    vadduwm 2, 2, 3
5983; PWR7-NEXT:    vsrw 3, 2, 4
5984; PWR7-NEXT:    vspltisb 4, 1
5985; PWR7-NEXT:    vrlw 1, 4, 5
5986; PWR7-NEXT:    vadduwm 2, 2, 3
5987; PWR7-NEXT:    xxlxor 35, 35, 35
5988; PWR7-NEXT:    xxland 34, 34, 32
5989; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
5990; PWR7-NEXT:    vmulouh 2, 2, 4
5991; PWR7-NEXT:    vspltisw 4, 12
5992; PWR7-NEXT:    vslw 3, 3, 5
5993; PWR7-NEXT:    vadduwm 2, 2, 3
5994; PWR7-NEXT:    vadduwm 3, 4, 4
5995; PWR7-NEXT:    vsrw 2, 2, 3
5996; PWR7-NEXT:    vspltisw 3, 9
5997; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
6103; PWR7-NEXT:    vsrw 3, 2, 3
6104; PWR7-NEXT:    addi 3, 3, .LCPI56_1@toc@l
6105; PWR7-NEXT:    vspltisb 0, 15
6106; PWR7-NEXT:    xxland 35, 35, 0
6107; PWR7-NEXT:    lxvw4x 0, 0, 3
6108; PWR7-NEXT:    vsubuwm 2, 2, 3
6109; PWR7-NEXT:    vsrw 3, 2, 4
6110; PWR7-NEXT:    xxland 34, 34, 0
6111; PWR7-NEXT:    vspltisw 4, 4
6112; PWR7-NEXT:    xxland 35, 35, 0
6113; PWR7-NEXT:    vadduwm 2, 2, 3
6114; PWR7-NEXT:    vsrw 3, 2, 4
6115; PWR7-NEXT:    vspltisb 4, 1
6116; PWR7-NEXT:    vrlw 1, 4, 5
6117; PWR7-NEXT:    vadduwm 2, 2, 3
6118; PWR7-NEXT:    xxlxor 35, 35, 35
6119; PWR7-NEXT:    xxland 34, 34, 32
6120; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6121; PWR7-NEXT:    vmulouh 2, 2, 4
6122; PWR7-NEXT:    vspltisw 4, 12
6123; PWR7-NEXT:    vslw 3, 3, 5
6124; PWR7-NEXT:    vadduwm 2, 2, 3
6125; PWR7-NEXT:    vadduwm 3, 4, 4
6126; PWR7-NEXT:    vsrw 2, 2, 3
6127; PWR7-NEXT:    vspltisw 3, 9
6128; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
6234; PWR7-NEXT:    vsrw 3, 2, 3
6235; PWR7-NEXT:    addi 3, 3, .LCPI57_1@toc@l
6236; PWR7-NEXT:    vspltisb 0, 15
6237; PWR7-NEXT:    xxland 35, 35, 0
6238; PWR7-NEXT:    lxvw4x 0, 0, 3
6239; PWR7-NEXT:    vsubuwm 2, 2, 3
6240; PWR7-NEXT:    vsrw 3, 2, 4
6241; PWR7-NEXT:    xxland 34, 34, 0
6242; PWR7-NEXT:    vspltisw 4, 4
6243; PWR7-NEXT:    xxland 35, 35, 0
6244; PWR7-NEXT:    vadduwm 2, 2, 3
6245; PWR7-NEXT:    vsrw 3, 2, 4
6246; PWR7-NEXT:    vspltisb 4, 1
6247; PWR7-NEXT:    vrlw 1, 4, 5
6248; PWR7-NEXT:    vadduwm 2, 2, 3
6249; PWR7-NEXT:    xxlxor 35, 35, 35
6250; PWR7-NEXT:    xxland 34, 34, 32
6251; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6252; PWR7-NEXT:    vmulouh 2, 2, 4
6253; PWR7-NEXT:    vspltisw 4, 12
6254; PWR7-NEXT:    vslw 3, 3, 5
6255; PWR7-NEXT:    vadduwm 2, 2, 3
6256; PWR7-NEXT:    vadduwm 3, 4, 4
6257; PWR7-NEXT:    vsrw 2, 2, 3
6258; PWR7-NEXT:    vspltisw 3, 10
6259; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
6365; PWR7-NEXT:    vsrw 3, 2, 3
6366; PWR7-NEXT:    addi 3, 3, .LCPI58_1@toc@l
6367; PWR7-NEXT:    vspltisb 0, 15
6368; PWR7-NEXT:    xxland 35, 35, 0
6369; PWR7-NEXT:    lxvw4x 0, 0, 3
6370; PWR7-NEXT:    vsubuwm 2, 2, 3
6371; PWR7-NEXT:    vsrw 3, 2, 4
6372; PWR7-NEXT:    xxland 34, 34, 0
6373; PWR7-NEXT:    vspltisw 4, 4
6374; PWR7-NEXT:    xxland 35, 35, 0
6375; PWR7-NEXT:    vadduwm 2, 2, 3
6376; PWR7-NEXT:    vsrw 3, 2, 4
6377; PWR7-NEXT:    vspltisb 4, 1
6378; PWR7-NEXT:    vrlw 1, 4, 5
6379; PWR7-NEXT:    vadduwm 2, 2, 3
6380; PWR7-NEXT:    xxlxor 35, 35, 35
6381; PWR7-NEXT:    xxland 34, 34, 32
6382; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6383; PWR7-NEXT:    vmulouh 2, 2, 4
6384; PWR7-NEXT:    vspltisw 4, 12
6385; PWR7-NEXT:    vslw 3, 3, 5
6386; PWR7-NEXT:    vadduwm 2, 2, 3
6387; PWR7-NEXT:    vadduwm 3, 4, 4
6388; PWR7-NEXT:    vsrw 2, 2, 3
6389; PWR7-NEXT:    vspltisw 3, 10
6390; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
6496; PWR7-NEXT:    vsrw 3, 2, 3
6497; PWR7-NEXT:    addi 3, 3, .LCPI59_1@toc@l
6498; PWR7-NEXT:    vspltisb 0, 15
6499; PWR7-NEXT:    xxland 35, 35, 0
6500; PWR7-NEXT:    lxvw4x 0, 0, 3
6501; PWR7-NEXT:    vsubuwm 2, 2, 3
6502; PWR7-NEXT:    vsrw 3, 2, 4
6503; PWR7-NEXT:    xxland 34, 34, 0
6504; PWR7-NEXT:    vspltisw 4, 4
6505; PWR7-NEXT:    xxland 35, 35, 0
6506; PWR7-NEXT:    vadduwm 2, 2, 3
6507; PWR7-NEXT:    vsrw 3, 2, 4
6508; PWR7-NEXT:    vspltisb 4, 1
6509; PWR7-NEXT:    vrlw 1, 4, 5
6510; PWR7-NEXT:    vadduwm 2, 2, 3
6511; PWR7-NEXT:    xxlxor 35, 35, 35
6512; PWR7-NEXT:    xxland 34, 34, 32
6513; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6514; PWR7-NEXT:    vmulouh 2, 2, 4
6515; PWR7-NEXT:    vspltisw 4, 12
6516; PWR7-NEXT:    vslw 3, 3, 5
6517; PWR7-NEXT:    vadduwm 2, 2, 3
6518; PWR7-NEXT:    vadduwm 3, 4, 4
6519; PWR7-NEXT:    vsrw 2, 2, 3
6520; PWR7-NEXT:    vspltisw 3, 11
6521; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
6627; PWR7-NEXT:    vsrw 3, 2, 3
6628; PWR7-NEXT:    addi 3, 3, .LCPI60_1@toc@l
6629; PWR7-NEXT:    vspltisb 0, 15
6630; PWR7-NEXT:    xxland 35, 35, 0
6631; PWR7-NEXT:    lxvw4x 0, 0, 3
6632; PWR7-NEXT:    vsubuwm 2, 2, 3
6633; PWR7-NEXT:    vsrw 3, 2, 4
6634; PWR7-NEXT:    xxland 34, 34, 0
6635; PWR7-NEXT:    vspltisw 4, 4
6636; PWR7-NEXT:    xxland 35, 35, 0
6637; PWR7-NEXT:    vadduwm 2, 2, 3
6638; PWR7-NEXT:    vsrw 3, 2, 4
6639; PWR7-NEXT:    vspltisb 4, 1
6640; PWR7-NEXT:    vrlw 1, 4, 5
6641; PWR7-NEXT:    vadduwm 2, 2, 3
6642; PWR7-NEXT:    xxlxor 35, 35, 35
6643; PWR7-NEXT:    xxland 34, 34, 32
6644; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6645; PWR7-NEXT:    vmulouh 2, 2, 4
6646; PWR7-NEXT:    vspltisw 4, 12
6647; PWR7-NEXT:    vslw 3, 3, 5
6648; PWR7-NEXT:    vadduwm 2, 2, 3
6649; PWR7-NEXT:    vadduwm 3, 4, 4
6650; PWR7-NEXT:    vsrw 2, 2, 3
6651; PWR7-NEXT:    vspltisw 3, 11
6652; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
6756; PWR7-NEXT:    vsrw 3, 2, 3
6757; PWR7-NEXT:    addi 3, 3, .LCPI61_1@toc@l
6758; PWR7-NEXT:    vspltisb 0, 15
6759; PWR7-NEXT:    xxland 35, 35, 0
6760; PWR7-NEXT:    lxvw4x 0, 0, 3
6761; PWR7-NEXT:    vsubuwm 2, 2, 3
6762; PWR7-NEXT:    vsrw 3, 2, 4
6763; PWR7-NEXT:    xxland 34, 34, 0
6764; PWR7-NEXT:    vspltisw 4, 4
6765; PWR7-NEXT:    xxland 35, 35, 0
6766; PWR7-NEXT:    vadduwm 2, 2, 3
6767; PWR7-NEXT:    vsrw 3, 2, 4
6768; PWR7-NEXT:    vspltisb 4, 1
6769; PWR7-NEXT:    vrlw 1, 4, 5
6770; PWR7-NEXT:    vadduwm 2, 2, 3
6771; PWR7-NEXT:    xxlxor 35, 35, 35
6772; PWR7-NEXT:    xxland 34, 34, 32
6773; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6774; PWR7-NEXT:    vmulouh 2, 2, 4
6775; PWR7-NEXT:    vspltisw 4, 12
6776; PWR7-NEXT:    vslw 3, 3, 5
6777; PWR7-NEXT:    vadduwm 2, 2, 3
6778; PWR7-NEXT:    vadduwm 3, 4, 4
6779; PWR7-NEXT:    vsrw 2, 2, 3
6780; PWR7-NEXT:    vcmpgtuw 2, 4, 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, -16
6884; PWR7-NEXT:    vsrw 3, 2, 3
6885; PWR7-NEXT:    addi 3, 3, .LCPI62_1@toc@l
6886; PWR7-NEXT:    vspltisb 0, 15
6887; PWR7-NEXT:    xxland 35, 35, 0
6888; PWR7-NEXT:    lxvw4x 0, 0, 3
6889; PWR7-NEXT:    vsubuwm 2, 2, 3
6890; PWR7-NEXT:    vsrw 3, 2, 4
6891; PWR7-NEXT:    xxland 34, 34, 0
6892; PWR7-NEXT:    vspltisw 4, 4
6893; PWR7-NEXT:    xxland 35, 35, 0
6894; PWR7-NEXT:    vadduwm 2, 2, 3
6895; PWR7-NEXT:    vsrw 3, 2, 4
6896; PWR7-NEXT:    vspltisb 4, 1
6897; PWR7-NEXT:    vrlw 1, 4, 5
6898; PWR7-NEXT:    vadduwm 2, 2, 3
6899; PWR7-NEXT:    xxlxor 35, 35, 35
6900; PWR7-NEXT:    xxland 34, 34, 32
6901; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
6902; PWR7-NEXT:    vmulouh 2, 2, 4
6903; PWR7-NEXT:    vspltisw 4, 12
6904; PWR7-NEXT:    vslw 3, 3, 5
6905; PWR7-NEXT:    vadduwm 2, 2, 3
6906; PWR7-NEXT:    vadduwm 3, 4, 4
6907; PWR7-NEXT:    vsrw 2, 2, 3
6908; PWR7-NEXT:    vcmpgtuw 2, 2, 4
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, -16
7014; PWR7-NEXT:    vsrw 3, 2, 3
7015; PWR7-NEXT:    addi 3, 3, .LCPI63_1@toc@l
7016; PWR7-NEXT:    vspltisb 0, 15
7017; PWR7-NEXT:    xxland 35, 35, 0
7018; PWR7-NEXT:    lxvw4x 0, 0, 3
7019; PWR7-NEXT:    vsubuwm 2, 2, 3
7020; PWR7-NEXT:    vsrw 3, 2, 4
7021; PWR7-NEXT:    xxland 34, 34, 0
7022; PWR7-NEXT:    vspltisw 4, 4
7023; PWR7-NEXT:    xxland 35, 35, 0
7024; PWR7-NEXT:    vadduwm 2, 2, 3
7025; PWR7-NEXT:    vsrw 3, 2, 4
7026; PWR7-NEXT:    vspltisb 4, 1
7027; PWR7-NEXT:    vrlw 1, 4, 5
7028; PWR7-NEXT:    vadduwm 2, 2, 3
7029; PWR7-NEXT:    xxlxor 35, 35, 35
7030; PWR7-NEXT:    xxland 34, 34, 32
7031; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7032; PWR7-NEXT:    vmulouh 2, 2, 4
7033; PWR7-NEXT:    vspltisw 4, 12
7034; PWR7-NEXT:    vslw 3, 3, 5
7035; PWR7-NEXT:    vadduwm 2, 2, 3
7036; PWR7-NEXT:    vadduwm 3, 4, 4
7037; PWR7-NEXT:    vsrw 2, 2, 3
7038; PWR7-NEXT:    vspltisw 3, 13
7039; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
7145; PWR7-NEXT:    vsrw 3, 2, 3
7146; PWR7-NEXT:    addi 3, 3, .LCPI64_1@toc@l
7147; PWR7-NEXT:    vspltisb 0, 15
7148; PWR7-NEXT:    xxland 35, 35, 0
7149; PWR7-NEXT:    lxvw4x 0, 0, 3
7150; PWR7-NEXT:    vsubuwm 2, 2, 3
7151; PWR7-NEXT:    vsrw 3, 2, 4
7152; PWR7-NEXT:    xxland 34, 34, 0
7153; PWR7-NEXT:    vspltisw 4, 4
7154; PWR7-NEXT:    xxland 35, 35, 0
7155; PWR7-NEXT:    vadduwm 2, 2, 3
7156; PWR7-NEXT:    vsrw 3, 2, 4
7157; PWR7-NEXT:    vspltisb 4, 1
7158; PWR7-NEXT:    vrlw 1, 4, 5
7159; PWR7-NEXT:    vadduwm 2, 2, 3
7160; PWR7-NEXT:    xxlxor 35, 35, 35
7161; PWR7-NEXT:    xxland 34, 34, 32
7162; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7163; PWR7-NEXT:    vmulouh 2, 2, 4
7164; PWR7-NEXT:    vspltisw 4, 12
7165; PWR7-NEXT:    vslw 3, 3, 5
7166; PWR7-NEXT:    vadduwm 2, 2, 3
7167; PWR7-NEXT:    vadduwm 3, 4, 4
7168; PWR7-NEXT:    vsrw 2, 2, 3
7169; PWR7-NEXT:    vspltisw 3, 13
7170; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
7276; PWR7-NEXT:    vsrw 3, 2, 3
7277; PWR7-NEXT:    addi 3, 3, .LCPI65_1@toc@l
7278; PWR7-NEXT:    vspltisb 0, 15
7279; PWR7-NEXT:    xxland 35, 35, 0
7280; PWR7-NEXT:    lxvw4x 0, 0, 3
7281; PWR7-NEXT:    vsubuwm 2, 2, 3
7282; PWR7-NEXT:    vsrw 3, 2, 4
7283; PWR7-NEXT:    xxland 34, 34, 0
7284; PWR7-NEXT:    vspltisw 4, 4
7285; PWR7-NEXT:    xxland 35, 35, 0
7286; PWR7-NEXT:    vadduwm 2, 2, 3
7287; PWR7-NEXT:    vsrw 3, 2, 4
7288; PWR7-NEXT:    vspltisb 4, 1
7289; PWR7-NEXT:    vrlw 1, 4, 5
7290; PWR7-NEXT:    vadduwm 2, 2, 3
7291; PWR7-NEXT:    xxlxor 35, 35, 35
7292; PWR7-NEXT:    xxland 34, 34, 32
7293; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7294; PWR7-NEXT:    vmulouh 2, 2, 4
7295; PWR7-NEXT:    vspltisw 4, 12
7296; PWR7-NEXT:    vslw 3, 3, 5
7297; PWR7-NEXT:    vadduwm 2, 2, 3
7298; PWR7-NEXT:    vadduwm 3, 4, 4
7299; PWR7-NEXT:    vsrw 2, 2, 3
7300; PWR7-NEXT:    vspltisw 3, 14
7301; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
7407; PWR7-NEXT:    vsrw 3, 2, 3
7408; PWR7-NEXT:    addi 3, 3, .LCPI66_1@toc@l
7409; PWR7-NEXT:    vspltisb 0, 15
7410; PWR7-NEXT:    xxland 35, 35, 0
7411; PWR7-NEXT:    lxvw4x 0, 0, 3
7412; PWR7-NEXT:    vsubuwm 2, 2, 3
7413; PWR7-NEXT:    vsrw 3, 2, 4
7414; PWR7-NEXT:    xxland 34, 34, 0
7415; PWR7-NEXT:    vspltisw 4, 4
7416; PWR7-NEXT:    xxland 35, 35, 0
7417; PWR7-NEXT:    vadduwm 2, 2, 3
7418; PWR7-NEXT:    vsrw 3, 2, 4
7419; PWR7-NEXT:    vspltisb 4, 1
7420; PWR7-NEXT:    vrlw 1, 4, 5
7421; PWR7-NEXT:    vadduwm 2, 2, 3
7422; PWR7-NEXT:    xxlxor 35, 35, 35
7423; PWR7-NEXT:    xxland 34, 34, 32
7424; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7425; PWR7-NEXT:    vmulouh 2, 2, 4
7426; PWR7-NEXT:    vspltisw 4, 12
7427; PWR7-NEXT:    vslw 3, 3, 5
7428; PWR7-NEXT:    vadduwm 2, 2, 3
7429; PWR7-NEXT:    vadduwm 3, 4, 4
7430; PWR7-NEXT:    vsrw 2, 2, 3
7431; PWR7-NEXT:    vspltisw 3, 14
7432; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
7538; PWR7-NEXT:    vsrw 3, 2, 3
7539; PWR7-NEXT:    addi 3, 3, .LCPI67_1@toc@l
7540; PWR7-NEXT:    vspltisb 0, 15
7541; PWR7-NEXT:    xxland 35, 35, 0
7542; PWR7-NEXT:    lxvw4x 0, 0, 3
7543; PWR7-NEXT:    vsubuwm 2, 2, 3
7544; PWR7-NEXT:    vsrw 3, 2, 4
7545; PWR7-NEXT:    xxland 34, 34, 0
7546; PWR7-NEXT:    vspltisw 4, 4
7547; PWR7-NEXT:    xxland 35, 35, 0
7548; PWR7-NEXT:    vadduwm 2, 2, 3
7549; PWR7-NEXT:    vsrw 3, 2, 4
7550; PWR7-NEXT:    vspltisb 4, 1
7551; PWR7-NEXT:    vrlw 1, 4, 5
7552; PWR7-NEXT:    vadduwm 2, 2, 3
7553; PWR7-NEXT:    xxlxor 35, 35, 35
7554; PWR7-NEXT:    xxland 34, 34, 32
7555; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7556; PWR7-NEXT:    vmulouh 2, 2, 4
7557; PWR7-NEXT:    vspltisw 4, 12
7558; PWR7-NEXT:    vslw 3, 3, 5
7559; PWR7-NEXT:    vadduwm 2, 2, 3
7560; PWR7-NEXT:    vadduwm 3, 4, 4
7561; PWR7-NEXT:    vsrw 2, 2, 3
7562; PWR7-NEXT:    vspltisw 3, 15
7563; PWR7-NEXT:    vcmpgtuw 2, 3, 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, -16
7669; PWR7-NEXT:    vsrw 3, 2, 3
7670; PWR7-NEXT:    addi 3, 3, .LCPI68_1@toc@l
7671; PWR7-NEXT:    vspltisb 0, 15
7672; PWR7-NEXT:    xxland 35, 35, 0
7673; PWR7-NEXT:    lxvw4x 0, 0, 3
7674; PWR7-NEXT:    vsubuwm 2, 2, 3
7675; PWR7-NEXT:    vsrw 3, 2, 4
7676; PWR7-NEXT:    xxland 34, 34, 0
7677; PWR7-NEXT:    vspltisw 4, 4
7678; PWR7-NEXT:    xxland 35, 35, 0
7679; PWR7-NEXT:    vadduwm 2, 2, 3
7680; PWR7-NEXT:    vsrw 3, 2, 4
7681; PWR7-NEXT:    vspltisb 4, 1
7682; PWR7-NEXT:    vrlw 1, 4, 5
7683; PWR7-NEXT:    vadduwm 2, 2, 3
7684; PWR7-NEXT:    xxlxor 35, 35, 35
7685; PWR7-NEXT:    xxland 34, 34, 32
7686; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7687; PWR7-NEXT:    vmulouh 2, 2, 4
7688; PWR7-NEXT:    vspltisw 4, 12
7689; PWR7-NEXT:    vslw 3, 3, 5
7690; PWR7-NEXT:    vadduwm 2, 2, 3
7691; PWR7-NEXT:    vadduwm 3, 4, 4
7692; PWR7-NEXT:    vsrw 2, 2, 3
7693; PWR7-NEXT:    vspltisw 3, 15
7694; PWR7-NEXT:    vcmpgtuw 2, 2, 3
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, -16
7802; PWR7-NEXT:    vsrw 3, 2, 3
7803; PWR7-NEXT:    addi 3, 3, .LCPI69_1@toc@l
7804; PWR7-NEXT:    vspltisb 0, 15
7805; PWR7-NEXT:    xxland 35, 35, 0
7806; PWR7-NEXT:    lxvw4x 0, 0, 3
7807; PWR7-NEXT:    vsubuwm 2, 2, 3
7808; PWR7-NEXT:    vsrw 3, 2, 4
7809; PWR7-NEXT:    xxland 34, 34, 0
7810; PWR7-NEXT:    vspltisw 4, 4
7811; PWR7-NEXT:    xxland 35, 35, 0
7812; PWR7-NEXT:    vadduwm 2, 2, 3
7813; PWR7-NEXT:    vsrw 3, 2, 4
7814; PWR7-NEXT:    vspltisb 4, 1
7815; PWR7-NEXT:    vrlw 1, 4, 5
7816; PWR7-NEXT:    vadduwm 2, 2, 3
7817; PWR7-NEXT:    xxlxor 35, 35, 35
7818; PWR7-NEXT:    xxland 34, 34, 32
7819; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7820; PWR7-NEXT:    vmulouh 2, 2, 4
7821; PWR7-NEXT:    vspltisw 4, 12
7822; PWR7-NEXT:    vslw 3, 3, 5
7823; PWR7-NEXT:    vadduwm 2, 2, 3
7824; PWR7-NEXT:    vadduwm 3, 4, 4
7825; PWR7-NEXT:    vsrw 2, 2, 3
7826; PWR7-NEXT:    vspltisw 3, 8
7827; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
7938; PWR7-NEXT:    vsrw 3, 2, 3
7939; PWR7-NEXT:    addi 3, 3, .LCPI70_1@toc@l
7940; PWR7-NEXT:    vspltisb 0, 15
7941; PWR7-NEXT:    xxland 35, 35, 0
7942; PWR7-NEXT:    lxvw4x 0, 0, 3
7943; PWR7-NEXT:    vsubuwm 2, 2, 3
7944; PWR7-NEXT:    vsrw 3, 2, 4
7945; PWR7-NEXT:    xxland 34, 34, 0
7946; PWR7-NEXT:    vspltisw 4, 4
7947; PWR7-NEXT:    xxland 35, 35, 0
7948; PWR7-NEXT:    vadduwm 2, 2, 3
7949; PWR7-NEXT:    vsrw 3, 2, 4
7950; PWR7-NEXT:    vspltisb 4, 1
7951; PWR7-NEXT:    vrlw 1, 4, 5
7952; PWR7-NEXT:    vadduwm 2, 2, 3
7953; PWR7-NEXT:    xxlxor 35, 35, 35
7954; PWR7-NEXT:    xxland 34, 34, 32
7955; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
7956; PWR7-NEXT:    vmulouh 2, 2, 4
7957; PWR7-NEXT:    vspltisw 4, 12
7958; PWR7-NEXT:    vslw 3, 3, 5
7959; PWR7-NEXT:    vadduwm 2, 2, 3
7960; PWR7-NEXT:    vadduwm 3, 4, 4
7961; PWR7-NEXT:    vsrw 2, 2, 3
7962; PWR7-NEXT:    vspltisw 3, 8
7963; PWR7-NEXT:    vadduwm 3, 3, 3
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 5, 2
8069; PWR7-NEXT:    lxvw4x 0, 0, 3
8070; PWR7-NEXT:    addis 3, 2, .LCPI71_1@toc@ha
8071; PWR7-NEXT:    vspltisw 0, -16
8072; PWR7-NEXT:    vsrw 4, 2, 3
8073; PWR7-NEXT:    addi 3, 3, .LCPI71_1@toc@l
8074; PWR7-NEXT:    vspltisb 1, 15
8075; PWR7-NEXT:    vsubuwm 3, 3, 0
8076; PWR7-NEXT:    xxland 36, 36, 0
8077; PWR7-NEXT:    lxvw4x 0, 0, 3
8078; PWR7-NEXT:    vsubuwm 2, 2, 4
8079; PWR7-NEXT:    vsrw 4, 2, 5
8080; PWR7-NEXT:    xxland 34, 34, 0
8081; PWR7-NEXT:    vspltisw 5, 4
8082; PWR7-NEXT:    xxland 36, 36, 0
8083; PWR7-NEXT:    vadduwm 2, 2, 4
8084; PWR7-NEXT:    vsrw 4, 2, 5
8085; PWR7-NEXT:    vspltisb 5, 1
8086; PWR7-NEXT:    vrlw 6, 5, 0
8087; PWR7-NEXT:    vadduwm 2, 2, 4
8088; PWR7-NEXT:    xxlxor 36, 36, 36
8089; PWR7-NEXT:    xxland 34, 34, 33
8090; PWR7-NEXT:    vmsumuhm 4, 2, 6, 4
8091; PWR7-NEXT:    vmulouh 2, 2, 5
8092; PWR7-NEXT:    vspltisw 5, 12
8093; PWR7-NEXT:    vslw 4, 4, 0
8094; PWR7-NEXT:    vadduwm 2, 2, 4
8095; PWR7-NEXT:    vadduwm 4, 5, 5
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 5, 2
8204; PWR7-NEXT:    lxvw4x 0, 0, 3
8205; PWR7-NEXT:    addis 3, 2, .LCPI72_1@toc@ha
8206; PWR7-NEXT:    vspltisw 0, -16
8207; PWR7-NEXT:    vsrw 4, 2, 3
8208; PWR7-NEXT:    addi 3, 3, .LCPI72_1@toc@l
8209; PWR7-NEXT:    vspltisb 1, 15
8210; PWR7-NEXT:    vsubuwm 3, 3, 0
8211; PWR7-NEXT:    xxland 36, 36, 0
8212; PWR7-NEXT:    lxvw4x 0, 0, 3
8213; PWR7-NEXT:    vsubuwm 2, 2, 4
8214; PWR7-NEXT:    vsrw 4, 2, 5
8215; PWR7-NEXT:    xxland 34, 34, 0
8216; PWR7-NEXT:    vspltisw 5, 4
8217; PWR7-NEXT:    xxland 36, 36, 0
8218; PWR7-NEXT:    vadduwm 2, 2, 4
8219; PWR7-NEXT:    vsrw 4, 2, 5
8220; PWR7-NEXT:    vspltisb 5, 1
8221; PWR7-NEXT:    vrlw 6, 5, 0
8222; PWR7-NEXT:    vadduwm 2, 2, 4
8223; PWR7-NEXT:    xxlxor 36, 36, 36
8224; PWR7-NEXT:    xxland 34, 34, 33
8225; PWR7-NEXT:    vmsumuhm 4, 2, 6, 4
8226; PWR7-NEXT:    vmulouh 2, 2, 5
8227; PWR7-NEXT:    vspltisw 5, 12
8228; PWR7-NEXT:    vslw 4, 4, 0
8229; PWR7-NEXT:    vadduwm 2, 2, 4
8230; PWR7-NEXT:    vadduwm 4, 5, 5
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, -16
8344; PWR7-NEXT:    vsrw 3, 2, 3
8345; PWR7-NEXT:    addi 3, 3, .LCPI73_1@toc@l
8346; PWR7-NEXT:    vspltisb 0, 15
8347; PWR7-NEXT:    xxland 35, 35, 0
8348; PWR7-NEXT:    lxvw4x 0, 0, 3
8349; PWR7-NEXT:    vsubuwm 2, 2, 3
8350; PWR7-NEXT:    vsrw 3, 2, 4
8351; PWR7-NEXT:    xxland 34, 34, 0
8352; PWR7-NEXT:    vspltisw 4, 4
8353; PWR7-NEXT:    xxland 35, 35, 0
8354; PWR7-NEXT:    vadduwm 2, 2, 3
8355; PWR7-NEXT:    vsrw 3, 2, 4
8356; PWR7-NEXT:    vspltisb 4, 1
8357; PWR7-NEXT:    vrlw 1, 4, 5
8358; PWR7-NEXT:    vadduwm 2, 2, 3
8359; PWR7-NEXT:    xxlxor 35, 35, 35
8360; PWR7-NEXT:    xxland 34, 34, 32
8361; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
8362; PWR7-NEXT:    vmulouh 2, 2, 4
8363; PWR7-NEXT:    vspltisw 4, 12
8364; PWR7-NEXT:    vslw 3, 3, 5
8365; PWR7-NEXT:    vadduwm 2, 2, 3
8366; PWR7-NEXT:    vadduwm 3, 4, 4
8367; PWR7-NEXT:    vsrw 2, 2, 3
8368; PWR7-NEXT:    vspltisw 3, 9
8369; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
8480; PWR7-NEXT:    vsrw 3, 2, 3
8481; PWR7-NEXT:    addi 3, 3, .LCPI74_1@toc@l
8482; PWR7-NEXT:    vspltisb 0, 15
8483; PWR7-NEXT:    xxland 35, 35, 0
8484; PWR7-NEXT:    lxvw4x 0, 0, 3
8485; PWR7-NEXT:    vsubuwm 2, 2, 3
8486; PWR7-NEXT:    vsrw 3, 2, 4
8487; PWR7-NEXT:    xxland 34, 34, 0
8488; PWR7-NEXT:    vspltisw 4, 4
8489; PWR7-NEXT:    xxland 35, 35, 0
8490; PWR7-NEXT:    vadduwm 2, 2, 3
8491; PWR7-NEXT:    vsrw 3, 2, 4
8492; PWR7-NEXT:    vspltisb 4, 1
8493; PWR7-NEXT:    vrlw 1, 4, 5
8494; PWR7-NEXT:    vadduwm 2, 2, 3
8495; PWR7-NEXT:    xxlxor 35, 35, 35
8496; PWR7-NEXT:    xxland 34, 34, 32
8497; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
8498; PWR7-NEXT:    vmulouh 2, 2, 4
8499; PWR7-NEXT:    vspltisw 4, 12
8500; PWR7-NEXT:    vslw 3, 3, 5
8501; PWR7-NEXT:    vadduwm 2, 2, 3
8502; PWR7-NEXT:    vadduwm 3, 4, 4
8503; PWR7-NEXT:    vsrw 2, 2, 3
8504; PWR7-NEXT:    vspltisw 3, 9
8505; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
8616; PWR7-NEXT:    vsrw 3, 2, 3
8617; PWR7-NEXT:    addi 3, 3, .LCPI75_1@toc@l
8618; PWR7-NEXT:    vspltisb 0, 15
8619; PWR7-NEXT:    xxland 35, 35, 0
8620; PWR7-NEXT:    lxvw4x 0, 0, 3
8621; PWR7-NEXT:    vsubuwm 2, 2, 3
8622; PWR7-NEXT:    vsrw 3, 2, 4
8623; PWR7-NEXT:    xxland 34, 34, 0
8624; PWR7-NEXT:    vspltisw 4, 4
8625; PWR7-NEXT:    xxland 35, 35, 0
8626; PWR7-NEXT:    vadduwm 2, 2, 3
8627; PWR7-NEXT:    vsrw 3, 2, 4
8628; PWR7-NEXT:    vspltisb 4, 1
8629; PWR7-NEXT:    vrlw 1, 4, 5
8630; PWR7-NEXT:    vadduwm 2, 2, 3
8631; PWR7-NEXT:    xxlxor 35, 35, 35
8632; PWR7-NEXT:    xxland 34, 34, 32
8633; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
8634; PWR7-NEXT:    vmulouh 2, 2, 4
8635; PWR7-NEXT:    vspltisw 4, 12
8636; PWR7-NEXT:    vslw 3, 3, 5
8637; PWR7-NEXT:    vadduwm 2, 2, 3
8638; PWR7-NEXT:    vadduwm 3, 4, 4
8639; PWR7-NEXT:    vsrw 2, 2, 3
8640; PWR7-NEXT:    vspltisw 3, 3
8641; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
8754; PWR7-NEXT:    vsrw 3, 2, 3
8755; PWR7-NEXT:    addi 3, 3, .LCPI76_1@toc@l
8756; PWR7-NEXT:    vspltisb 0, 15
8757; PWR7-NEXT:    xxland 35, 35, 0
8758; PWR7-NEXT:    lxvw4x 0, 0, 3
8759; PWR7-NEXT:    vsubuwm 2, 2, 3
8760; PWR7-NEXT:    vsrw 3, 2, 4
8761; PWR7-NEXT:    xxland 34, 34, 0
8762; PWR7-NEXT:    vspltisw 4, 4
8763; PWR7-NEXT:    xxland 35, 35, 0
8764; PWR7-NEXT:    vadduwm 2, 2, 3
8765; PWR7-NEXT:    vsrw 3, 2, 4
8766; PWR7-NEXT:    vspltisb 4, 1
8767; PWR7-NEXT:    vrlw 1, 4, 5
8768; PWR7-NEXT:    vadduwm 2, 2, 3
8769; PWR7-NEXT:    xxlxor 35, 35, 35
8770; PWR7-NEXT:    xxland 34, 34, 32
8771; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
8772; PWR7-NEXT:    vmulouh 2, 2, 4
8773; PWR7-NEXT:    vspltisw 4, 12
8774; PWR7-NEXT:    vslw 3, 3, 5
8775; PWR7-NEXT:    vadduwm 2, 2, 3
8776; PWR7-NEXT:    vadduwm 3, 4, 4
8777; PWR7-NEXT:    vsrw 2, 2, 3
8778; PWR7-NEXT:    vspltisw 3, 3
8779; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
8892; PWR7-NEXT:    vsrw 3, 2, 3
8893; PWR7-NEXT:    addi 3, 3, .LCPI77_1@toc@l
8894; PWR7-NEXT:    vspltisb 0, 15
8895; PWR7-NEXT:    xxland 35, 35, 0
8896; PWR7-NEXT:    lxvw4x 0, 0, 3
8897; PWR7-NEXT:    vsubuwm 2, 2, 3
8898; PWR7-NEXT:    vsrw 3, 2, 4
8899; PWR7-NEXT:    xxland 34, 34, 0
8900; PWR7-NEXT:    vspltisw 4, 4
8901; PWR7-NEXT:    xxland 35, 35, 0
8902; PWR7-NEXT:    vadduwm 2, 2, 3
8903; PWR7-NEXT:    vsrw 3, 2, 4
8904; PWR7-NEXT:    vspltisb 4, 1
8905; PWR7-NEXT:    vrlw 1, 4, 5
8906; PWR7-NEXT:    vadduwm 2, 2, 3
8907; PWR7-NEXT:    xxlxor 35, 35, 35
8908; PWR7-NEXT:    xxland 34, 34, 32
8909; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
8910; PWR7-NEXT:    vmulouh 2, 2, 4
8911; PWR7-NEXT:    vspltisw 4, 12
8912; PWR7-NEXT:    vslw 3, 3, 5
8913; PWR7-NEXT:    vadduwm 2, 2, 3
8914; PWR7-NEXT:    vadduwm 3, 4, 4
8915; PWR7-NEXT:    vsrw 2, 2, 3
8916; PWR7-NEXT:    vspltisw 3, 10
8917; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
9028; PWR7-NEXT:    vsrw 3, 2, 3
9029; PWR7-NEXT:    addi 3, 3, .LCPI78_1@toc@l
9030; PWR7-NEXT:    vspltisb 0, 15
9031; PWR7-NEXT:    xxland 35, 35, 0
9032; PWR7-NEXT:    lxvw4x 0, 0, 3
9033; PWR7-NEXT:    vsubuwm 2, 2, 3
9034; PWR7-NEXT:    vsrw 3, 2, 4
9035; PWR7-NEXT:    xxland 34, 34, 0
9036; PWR7-NEXT:    vspltisw 4, 4
9037; PWR7-NEXT:    xxland 35, 35, 0
9038; PWR7-NEXT:    vadduwm 2, 2, 3
9039; PWR7-NEXT:    vsrw 3, 2, 4
9040; PWR7-NEXT:    vspltisb 4, 1
9041; PWR7-NEXT:    vrlw 1, 4, 5
9042; PWR7-NEXT:    vadduwm 2, 2, 3
9043; PWR7-NEXT:    xxlxor 35, 35, 35
9044; PWR7-NEXT:    xxland 34, 34, 32
9045; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9046; PWR7-NEXT:    vmulouh 2, 2, 4
9047; PWR7-NEXT:    vspltisw 4, 12
9048; PWR7-NEXT:    vslw 3, 3, 5
9049; PWR7-NEXT:    vadduwm 2, 2, 3
9050; PWR7-NEXT:    vadduwm 3, 4, 4
9051; PWR7-NEXT:    vsrw 2, 2, 3
9052; PWR7-NEXT:    vspltisw 3, 10
9053; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
9164; PWR7-NEXT:    vsrw 3, 2, 3
9165; PWR7-NEXT:    addi 3, 3, .LCPI79_1@toc@l
9166; PWR7-NEXT:    vspltisb 0, 15
9167; PWR7-NEXT:    xxland 35, 35, 0
9168; PWR7-NEXT:    lxvw4x 0, 0, 3
9169; PWR7-NEXT:    vsubuwm 2, 2, 3
9170; PWR7-NEXT:    vsrw 3, 2, 4
9171; PWR7-NEXT:    xxland 34, 34, 0
9172; PWR7-NEXT:    vspltisw 4, 4
9173; PWR7-NEXT:    xxland 35, 35, 0
9174; PWR7-NEXT:    vadduwm 2, 2, 3
9175; PWR7-NEXT:    vsrw 3, 2, 4
9176; PWR7-NEXT:    vspltisb 4, 1
9177; PWR7-NEXT:    vrlw 1, 4, 5
9178; PWR7-NEXT:    vadduwm 2, 2, 3
9179; PWR7-NEXT:    xxlxor 35, 35, 35
9180; PWR7-NEXT:    xxland 34, 34, 32
9181; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9182; PWR7-NEXT:    vmulouh 2, 2, 4
9183; PWR7-NEXT:    vspltisw 4, 12
9184; PWR7-NEXT:    vslw 3, 3, 5
9185; PWR7-NEXT:    vadduwm 2, 2, 3
9186; PWR7-NEXT:    vadduwm 3, 4, 4
9187; PWR7-NEXT:    vsrw 2, 2, 3
9188; PWR7-NEXT:    vspltisw 3, 5
9189; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
9302; PWR7-NEXT:    vsrw 3, 2, 3
9303; PWR7-NEXT:    addi 3, 3, .LCPI80_1@toc@l
9304; PWR7-NEXT:    vspltisb 0, 15
9305; PWR7-NEXT:    xxland 35, 35, 0
9306; PWR7-NEXT:    lxvw4x 0, 0, 3
9307; PWR7-NEXT:    vsubuwm 2, 2, 3
9308; PWR7-NEXT:    vsrw 3, 2, 4
9309; PWR7-NEXT:    xxland 34, 34, 0
9310; PWR7-NEXT:    vspltisw 4, 4
9311; PWR7-NEXT:    xxland 35, 35, 0
9312; PWR7-NEXT:    vadduwm 2, 2, 3
9313; PWR7-NEXT:    vsrw 3, 2, 4
9314; PWR7-NEXT:    vspltisb 4, 1
9315; PWR7-NEXT:    vrlw 1, 4, 5
9316; PWR7-NEXT:    vadduwm 2, 2, 3
9317; PWR7-NEXT:    xxlxor 35, 35, 35
9318; PWR7-NEXT:    xxland 34, 34, 32
9319; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9320; PWR7-NEXT:    vmulouh 2, 2, 4
9321; PWR7-NEXT:    vspltisw 4, 12
9322; PWR7-NEXT:    vslw 3, 3, 5
9323; PWR7-NEXT:    vadduwm 2, 2, 3
9324; PWR7-NEXT:    vadduwm 3, 4, 4
9325; PWR7-NEXT:    vsrw 2, 2, 3
9326; PWR7-NEXT:    vspltisw 3, 5
9327; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
9440; PWR7-NEXT:    vsrw 3, 2, 3
9441; PWR7-NEXT:    addi 3, 3, .LCPI81_1@toc@l
9442; PWR7-NEXT:    vspltisb 0, 15
9443; PWR7-NEXT:    xxland 35, 35, 0
9444; PWR7-NEXT:    lxvw4x 0, 0, 3
9445; PWR7-NEXT:    vsubuwm 2, 2, 3
9446; PWR7-NEXT:    vsrw 3, 2, 4
9447; PWR7-NEXT:    xxland 34, 34, 0
9448; PWR7-NEXT:    vspltisw 4, 4
9449; PWR7-NEXT:    xxland 35, 35, 0
9450; PWR7-NEXT:    vadduwm 2, 2, 3
9451; PWR7-NEXT:    vsrw 3, 2, 4
9452; PWR7-NEXT:    vspltisb 4, 1
9453; PWR7-NEXT:    vrlw 1, 4, 5
9454; PWR7-NEXT:    vadduwm 2, 2, 3
9455; PWR7-NEXT:    xxlxor 35, 35, 35
9456; PWR7-NEXT:    xxland 34, 34, 32
9457; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9458; PWR7-NEXT:    vmulouh 2, 2, 4
9459; PWR7-NEXT:    vspltisw 4, 12
9460; PWR7-NEXT:    vslw 3, 3, 5
9461; PWR7-NEXT:    vadduwm 2, 2, 3
9462; PWR7-NEXT:    vadduwm 3, 4, 4
9463; PWR7-NEXT:    vsrw 2, 2, 3
9464; PWR7-NEXT:    vspltisw 3, 11
9465; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
9576; PWR7-NEXT:    vsrw 3, 2, 3
9577; PWR7-NEXT:    addi 3, 3, .LCPI82_1@toc@l
9578; PWR7-NEXT:    vspltisb 0, 15
9579; PWR7-NEXT:    xxland 35, 35, 0
9580; PWR7-NEXT:    lxvw4x 0, 0, 3
9581; PWR7-NEXT:    vsubuwm 2, 2, 3
9582; PWR7-NEXT:    vsrw 3, 2, 4
9583; PWR7-NEXT:    xxland 34, 34, 0
9584; PWR7-NEXT:    vspltisw 4, 4
9585; PWR7-NEXT:    xxland 35, 35, 0
9586; PWR7-NEXT:    vadduwm 2, 2, 3
9587; PWR7-NEXT:    vsrw 3, 2, 4
9588; PWR7-NEXT:    vspltisb 4, 1
9589; PWR7-NEXT:    vrlw 1, 4, 5
9590; PWR7-NEXT:    vadduwm 2, 2, 3
9591; PWR7-NEXT:    xxlxor 35, 35, 35
9592; PWR7-NEXT:    xxland 34, 34, 32
9593; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9594; PWR7-NEXT:    vmulouh 2, 2, 4
9595; PWR7-NEXT:    vspltisw 4, 12
9596; PWR7-NEXT:    vslw 3, 3, 5
9597; PWR7-NEXT:    vadduwm 2, 2, 3
9598; PWR7-NEXT:    vadduwm 3, 4, 4
9599; PWR7-NEXT:    vsrw 2, 2, 3
9600; PWR7-NEXT:    vspltisw 3, 11
9601; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
9712; PWR7-NEXT:    vsrw 3, 2, 3
9713; PWR7-NEXT:    addi 3, 3, .LCPI83_1@toc@l
9714; PWR7-NEXT:    vspltisb 0, 15
9715; PWR7-NEXT:    xxland 35, 35, 0
9716; PWR7-NEXT:    lxvw4x 0, 0, 3
9717; PWR7-NEXT:    vsubuwm 2, 2, 3
9718; PWR7-NEXT:    vsrw 3, 2, 4
9719; PWR7-NEXT:    xxland 34, 34, 0
9720; PWR7-NEXT:    vspltisw 4, 4
9721; PWR7-NEXT:    xxland 35, 35, 0
9722; PWR7-NEXT:    vadduwm 2, 2, 3
9723; PWR7-NEXT:    vsrw 3, 2, 4
9724; PWR7-NEXT:    vspltisb 4, 1
9725; PWR7-NEXT:    vrlw 1, 4, 5
9726; PWR7-NEXT:    vadduwm 2, 2, 3
9727; PWR7-NEXT:    xxlxor 35, 35, 35
9728; PWR7-NEXT:    xxland 34, 34, 32
9729; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9730; PWR7-NEXT:    vmulouh 2, 2, 4
9731; PWR7-NEXT:    vspltisw 4, 12
9732; PWR7-NEXT:    vslw 3, 3, 5
9733; PWR7-NEXT:    vadduwm 2, 2, 3
9734; PWR7-NEXT:    vadduwm 3, 4, 4
9735; PWR7-NEXT:    vsrw 2, 2, 3
9736; PWR7-NEXT:    vspltisw 3, 7
9737; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
9850; PWR7-NEXT:    vsrw 3, 2, 3
9851; PWR7-NEXT:    addi 3, 3, .LCPI84_1@toc@l
9852; PWR7-NEXT:    vspltisb 0, 15
9853; PWR7-NEXT:    xxland 35, 35, 0
9854; PWR7-NEXT:    lxvw4x 0, 0, 3
9855; PWR7-NEXT:    vsubuwm 2, 2, 3
9856; PWR7-NEXT:    vsrw 3, 2, 4
9857; PWR7-NEXT:    xxland 34, 34, 0
9858; PWR7-NEXT:    vspltisw 4, 4
9859; PWR7-NEXT:    xxland 35, 35, 0
9860; PWR7-NEXT:    vadduwm 2, 2, 3
9861; PWR7-NEXT:    vsrw 3, 2, 4
9862; PWR7-NEXT:    vspltisb 4, 1
9863; PWR7-NEXT:    vrlw 1, 4, 5
9864; PWR7-NEXT:    vadduwm 2, 2, 3
9865; PWR7-NEXT:    xxlxor 35, 35, 35
9866; PWR7-NEXT:    xxland 34, 34, 32
9867; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
9868; PWR7-NEXT:    vmulouh 2, 2, 4
9869; PWR7-NEXT:    vspltisw 4, 12
9870; PWR7-NEXT:    vslw 3, 3, 5
9871; PWR7-NEXT:    vadduwm 2, 2, 3
9872; PWR7-NEXT:    vadduwm 3, 4, 4
9873; PWR7-NEXT:    vsrw 2, 2, 3
9874; PWR7-NEXT:    vspltisw 3, 7
9875; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
9984; PWR7-NEXT:    vsrw 3, 2, 3
9985; PWR7-NEXT:    addi 3, 3, .LCPI85_1@toc@l
9986; PWR7-NEXT:    vspltisb 0, 15
9987; PWR7-NEXT:    xxland 35, 35, 0
9988; PWR7-NEXT:    lxvw4x 0, 0, 3
9989; PWR7-NEXT:    vsubuwm 2, 2, 3
9990; PWR7-NEXT:    vsrw 3, 2, 4
9991; PWR7-NEXT:    xxland 34, 34, 0
9992; PWR7-NEXT:    vspltisw 4, 4
9993; PWR7-NEXT:    xxland 35, 35, 0
9994; PWR7-NEXT:    vadduwm 2, 2, 3
9995; PWR7-NEXT:    vsrw 3, 2, 4
9996; PWR7-NEXT:    vspltisb 4, 1
9997; PWR7-NEXT:    vrlw 1, 4, 5
9998; PWR7-NEXT:    vadduwm 2, 2, 3
9999; PWR7-NEXT:    xxlxor 35, 35, 35
10000; PWR7-NEXT:    xxland 34, 34, 32
10001; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10002; PWR7-NEXT:    vmulouh 2, 2, 4
10003; PWR7-NEXT:    vspltisw 4, 12
10004; PWR7-NEXT:    vslw 3, 3, 5
10005; PWR7-NEXT:    vadduwm 2, 2, 3
10006; PWR7-NEXT:    vadduwm 3, 4, 4
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, -16
10114; PWR7-NEXT:    vsrw 3, 2, 3
10115; PWR7-NEXT:    addi 3, 3, .LCPI86_1@toc@l
10116; PWR7-NEXT:    vspltisb 0, 15
10117; PWR7-NEXT:    xxland 35, 35, 0
10118; PWR7-NEXT:    lxvw4x 0, 0, 3
10119; PWR7-NEXT:    vsubuwm 2, 2, 3
10120; PWR7-NEXT:    vsrw 3, 2, 4
10121; PWR7-NEXT:    xxland 34, 34, 0
10122; PWR7-NEXT:    vspltisw 4, 4
10123; PWR7-NEXT:    xxland 35, 35, 0
10124; PWR7-NEXT:    vadduwm 2, 2, 3
10125; PWR7-NEXT:    vsrw 3, 2, 4
10126; PWR7-NEXT:    vspltisb 4, 1
10127; PWR7-NEXT:    vrlw 1, 4, 5
10128; PWR7-NEXT:    vadduwm 2, 2, 3
10129; PWR7-NEXT:    xxlxor 35, 35, 35
10130; PWR7-NEXT:    xxland 34, 34, 32
10131; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10132; PWR7-NEXT:    vmulouh 2, 2, 4
10133; PWR7-NEXT:    vspltisw 4, 12
10134; PWR7-NEXT:    vslw 3, 3, 5
10135; PWR7-NEXT:    vadduwm 2, 2, 3
10136; PWR7-NEXT:    vadduwm 3, 4, 4
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, -16
10248; PWR7-NEXT:    vsrw 3, 2, 3
10249; PWR7-NEXT:    addi 3, 3, .LCPI87_1@toc@l
10250; PWR7-NEXT:    vspltisb 0, 15
10251; PWR7-NEXT:    xxland 35, 35, 0
10252; PWR7-NEXT:    lxvw4x 0, 0, 3
10253; PWR7-NEXT:    vsubuwm 2, 2, 3
10254; PWR7-NEXT:    vsrw 3, 2, 4
10255; PWR7-NEXT:    xxland 34, 34, 0
10256; PWR7-NEXT:    vspltisw 4, 4
10257; PWR7-NEXT:    xxland 35, 35, 0
10258; PWR7-NEXT:    vadduwm 2, 2, 3
10259; PWR7-NEXT:    vsrw 3, 2, 4
10260; PWR7-NEXT:    vspltisb 4, 1
10261; PWR7-NEXT:    vrlw 1, 4, 5
10262; PWR7-NEXT:    vadduwm 2, 2, 3
10263; PWR7-NEXT:    xxlxor 35, 35, 35
10264; PWR7-NEXT:    xxland 34, 34, 32
10265; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10266; PWR7-NEXT:    vmulouh 2, 2, 4
10267; PWR7-NEXT:    vspltisw 4, 12
10268; PWR7-NEXT:    vslw 3, 3, 5
10269; PWR7-NEXT:    vadduwm 2, 2, 3
10270; PWR7-NEXT:    vadduwm 3, 4, 4
10271; PWR7-NEXT:    vsrw 2, 2, 3
10272; PWR7-NEXT:    vspltisw 3, 9
10273; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
10386; PWR7-NEXT:    vsrw 3, 2, 3
10387; PWR7-NEXT:    addi 3, 3, .LCPI88_1@toc@l
10388; PWR7-NEXT:    vspltisb 0, 15
10389; PWR7-NEXT:    xxland 35, 35, 0
10390; PWR7-NEXT:    lxvw4x 0, 0, 3
10391; PWR7-NEXT:    vsubuwm 2, 2, 3
10392; PWR7-NEXT:    vsrw 3, 2, 4
10393; PWR7-NEXT:    xxland 34, 34, 0
10394; PWR7-NEXT:    vspltisw 4, 4
10395; PWR7-NEXT:    xxland 35, 35, 0
10396; PWR7-NEXT:    vadduwm 2, 2, 3
10397; PWR7-NEXT:    vsrw 3, 2, 4
10398; PWR7-NEXT:    vspltisb 4, 1
10399; PWR7-NEXT:    vrlw 1, 4, 5
10400; PWR7-NEXT:    vadduwm 2, 2, 3
10401; PWR7-NEXT:    xxlxor 35, 35, 35
10402; PWR7-NEXT:    xxland 34, 34, 32
10403; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10404; PWR7-NEXT:    vmulouh 2, 2, 4
10405; PWR7-NEXT:    vspltisw 4, 12
10406; PWR7-NEXT:    vslw 3, 3, 5
10407; PWR7-NEXT:    vadduwm 2, 2, 3
10408; PWR7-NEXT:    vadduwm 3, 4, 4
10409; PWR7-NEXT:    vsrw 2, 2, 3
10410; PWR7-NEXT:    vspltisw 3, 9
10411; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
10524; PWR7-NEXT:    vsrw 3, 2, 3
10525; PWR7-NEXT:    addi 3, 3, .LCPI89_1@toc@l
10526; PWR7-NEXT:    vspltisb 0, 15
10527; PWR7-NEXT:    xxland 35, 35, 0
10528; PWR7-NEXT:    lxvw4x 0, 0, 3
10529; PWR7-NEXT:    vsubuwm 2, 2, 3
10530; PWR7-NEXT:    vsrw 3, 2, 4
10531; PWR7-NEXT:    xxland 34, 34, 0
10532; PWR7-NEXT:    vspltisw 4, 4
10533; PWR7-NEXT:    xxland 35, 35, 0
10534; PWR7-NEXT:    vadduwm 2, 2, 3
10535; PWR7-NEXT:    vsrw 3, 2, 4
10536; PWR7-NEXT:    vspltisb 4, 1
10537; PWR7-NEXT:    vrlw 1, 4, 5
10538; PWR7-NEXT:    vadduwm 2, 2, 3
10539; PWR7-NEXT:    xxlxor 35, 35, 35
10540; PWR7-NEXT:    xxland 34, 34, 32
10541; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10542; PWR7-NEXT:    vmulouh 2, 2, 4
10543; PWR7-NEXT:    vspltisw 4, 12
10544; PWR7-NEXT:    vslw 3, 3, 5
10545; PWR7-NEXT:    vadduwm 2, 2, 3
10546; PWR7-NEXT:    vadduwm 3, 4, 4
10547; PWR7-NEXT:    vsrw 2, 2, 3
10548; PWR7-NEXT:    vspltisw 3, 13
10549; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
10660; PWR7-NEXT:    vsrw 3, 2, 3
10661; PWR7-NEXT:    addi 3, 3, .LCPI90_1@toc@l
10662; PWR7-NEXT:    vspltisb 0, 15
10663; PWR7-NEXT:    xxland 35, 35, 0
10664; PWR7-NEXT:    lxvw4x 0, 0, 3
10665; PWR7-NEXT:    vsubuwm 2, 2, 3
10666; PWR7-NEXT:    vsrw 3, 2, 4
10667; PWR7-NEXT:    xxland 34, 34, 0
10668; PWR7-NEXT:    vspltisw 4, 4
10669; PWR7-NEXT:    xxland 35, 35, 0
10670; PWR7-NEXT:    vadduwm 2, 2, 3
10671; PWR7-NEXT:    vsrw 3, 2, 4
10672; PWR7-NEXT:    vspltisb 4, 1
10673; PWR7-NEXT:    vrlw 1, 4, 5
10674; PWR7-NEXT:    vadduwm 2, 2, 3
10675; PWR7-NEXT:    xxlxor 35, 35, 35
10676; PWR7-NEXT:    xxland 34, 34, 32
10677; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10678; PWR7-NEXT:    vmulouh 2, 2, 4
10679; PWR7-NEXT:    vspltisw 4, 12
10680; PWR7-NEXT:    vslw 3, 3, 5
10681; PWR7-NEXT:    vadduwm 2, 2, 3
10682; PWR7-NEXT:    vadduwm 3, 4, 4
10683; PWR7-NEXT:    vsrw 2, 2, 3
10684; PWR7-NEXT:    vspltisw 3, 13
10685; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
10796; PWR7-NEXT:    vsrw 3, 2, 3
10797; PWR7-NEXT:    addi 3, 3, .LCPI91_1@toc@l
10798; PWR7-NEXT:    vspltisb 0, 15
10799; PWR7-NEXT:    xxland 35, 35, 0
10800; PWR7-NEXT:    lxvw4x 0, 0, 3
10801; PWR7-NEXT:    vsubuwm 2, 2, 3
10802; PWR7-NEXT:    vsrw 3, 2, 4
10803; PWR7-NEXT:    xxland 34, 34, 0
10804; PWR7-NEXT:    vspltisw 4, 4
10805; PWR7-NEXT:    xxland 35, 35, 0
10806; PWR7-NEXT:    vadduwm 2, 2, 3
10807; PWR7-NEXT:    vsrw 3, 2, 4
10808; PWR7-NEXT:    vspltisb 4, 1
10809; PWR7-NEXT:    vrlw 1, 4, 5
10810; PWR7-NEXT:    vadduwm 2, 2, 3
10811; PWR7-NEXT:    xxlxor 35, 35, 35
10812; PWR7-NEXT:    xxland 34, 34, 32
10813; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10814; PWR7-NEXT:    vmulouh 2, 2, 4
10815; PWR7-NEXT:    vspltisw 4, 12
10816; PWR7-NEXT:    vslw 3, 3, 5
10817; PWR7-NEXT:    vadduwm 2, 2, 3
10818; PWR7-NEXT:    vadduwm 3, 4, 4
10819; PWR7-NEXT:    vsrw 2, 2, 3
10820; PWR7-NEXT:    vspltisw 3, 11
10821; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
10934; PWR7-NEXT:    vsrw 3, 2, 3
10935; PWR7-NEXT:    addi 3, 3, .LCPI92_1@toc@l
10936; PWR7-NEXT:    vspltisb 0, 15
10937; PWR7-NEXT:    xxland 35, 35, 0
10938; PWR7-NEXT:    lxvw4x 0, 0, 3
10939; PWR7-NEXT:    vsubuwm 2, 2, 3
10940; PWR7-NEXT:    vsrw 3, 2, 4
10941; PWR7-NEXT:    xxland 34, 34, 0
10942; PWR7-NEXT:    vspltisw 4, 4
10943; PWR7-NEXT:    xxland 35, 35, 0
10944; PWR7-NEXT:    vadduwm 2, 2, 3
10945; PWR7-NEXT:    vsrw 3, 2, 4
10946; PWR7-NEXT:    vspltisb 4, 1
10947; PWR7-NEXT:    vrlw 1, 4, 5
10948; PWR7-NEXT:    vadduwm 2, 2, 3
10949; PWR7-NEXT:    xxlxor 35, 35, 35
10950; PWR7-NEXT:    xxland 34, 34, 32
10951; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
10952; PWR7-NEXT:    vmulouh 2, 2, 4
10953; PWR7-NEXT:    vspltisw 4, 12
10954; PWR7-NEXT:    vslw 3, 3, 5
10955; PWR7-NEXT:    vadduwm 2, 2, 3
10956; PWR7-NEXT:    vadduwm 3, 4, 4
10957; PWR7-NEXT:    vsrw 2, 2, 3
10958; PWR7-NEXT:    vspltisw 3, 11
10959; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
11072; PWR7-NEXT:    vsrw 3, 2, 3
11073; PWR7-NEXT:    addi 3, 3, .LCPI93_1@toc@l
11074; PWR7-NEXT:    vspltisb 0, 15
11075; PWR7-NEXT:    xxland 35, 35, 0
11076; PWR7-NEXT:    lxvw4x 0, 0, 3
11077; PWR7-NEXT:    vsubuwm 2, 2, 3
11078; PWR7-NEXT:    vsrw 3, 2, 4
11079; PWR7-NEXT:    xxland 34, 34, 0
11080; PWR7-NEXT:    vspltisw 4, 4
11081; PWR7-NEXT:    xxland 35, 35, 0
11082; PWR7-NEXT:    vadduwm 2, 2, 3
11083; PWR7-NEXT:    vsrw 3, 2, 4
11084; PWR7-NEXT:    vspltisb 4, 1
11085; PWR7-NEXT:    vrlw 1, 4, 5
11086; PWR7-NEXT:    vadduwm 2, 2, 3
11087; PWR7-NEXT:    xxlxor 35, 35, 35
11088; PWR7-NEXT:    xxland 34, 34, 32
11089; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11090; PWR7-NEXT:    vmulouh 2, 2, 4
11091; PWR7-NEXT:    vspltisw 4, 12
11092; PWR7-NEXT:    vslw 3, 3, 5
11093; PWR7-NEXT:    vadduwm 2, 2, 3
11094; PWR7-NEXT:    vadduwm 3, 4, 4
11095; PWR7-NEXT:    vsrw 2, 2, 3
11096; PWR7-NEXT:    vspltisw 3, 14
11097; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
11208; PWR7-NEXT:    vsrw 3, 2, 3
11209; PWR7-NEXT:    addi 3, 3, .LCPI94_1@toc@l
11210; PWR7-NEXT:    vspltisb 0, 15
11211; PWR7-NEXT:    xxland 35, 35, 0
11212; PWR7-NEXT:    lxvw4x 0, 0, 3
11213; PWR7-NEXT:    vsubuwm 2, 2, 3
11214; PWR7-NEXT:    vsrw 3, 2, 4
11215; PWR7-NEXT:    xxland 34, 34, 0
11216; PWR7-NEXT:    vspltisw 4, 4
11217; PWR7-NEXT:    xxland 35, 35, 0
11218; PWR7-NEXT:    vadduwm 2, 2, 3
11219; PWR7-NEXT:    vsrw 3, 2, 4
11220; PWR7-NEXT:    vspltisb 4, 1
11221; PWR7-NEXT:    vrlw 1, 4, 5
11222; PWR7-NEXT:    vadduwm 2, 2, 3
11223; PWR7-NEXT:    xxlxor 35, 35, 35
11224; PWR7-NEXT:    xxland 34, 34, 32
11225; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11226; PWR7-NEXT:    vmulouh 2, 2, 4
11227; PWR7-NEXT:    vspltisw 4, 12
11228; PWR7-NEXT:    vslw 3, 3, 5
11229; PWR7-NEXT:    vadduwm 2, 2, 3
11230; PWR7-NEXT:    vadduwm 3, 4, 4
11231; PWR7-NEXT:    vsrw 2, 2, 3
11232; PWR7-NEXT:    vspltisw 3, 14
11233; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
11344; PWR7-NEXT:    vsrw 3, 2, 3
11345; PWR7-NEXT:    addi 3, 3, .LCPI95_1@toc@l
11346; PWR7-NEXT:    vspltisb 0, 15
11347; PWR7-NEXT:    xxland 35, 35, 0
11348; PWR7-NEXT:    lxvw4x 0, 0, 3
11349; PWR7-NEXT:    vsubuwm 2, 2, 3
11350; PWR7-NEXT:    vsrw 3, 2, 4
11351; PWR7-NEXT:    xxland 34, 34, 0
11352; PWR7-NEXT:    vspltisw 4, 4
11353; PWR7-NEXT:    xxland 35, 35, 0
11354; PWR7-NEXT:    vadduwm 2, 2, 3
11355; PWR7-NEXT:    vsrw 3, 2, 4
11356; PWR7-NEXT:    vspltisb 4, 1
11357; PWR7-NEXT:    vrlw 1, 4, 5
11358; PWR7-NEXT:    vadduwm 2, 2, 3
11359; PWR7-NEXT:    xxlxor 35, 35, 35
11360; PWR7-NEXT:    xxland 34, 34, 32
11361; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11362; PWR7-NEXT:    vmulouh 2, 2, 4
11363; PWR7-NEXT:    vspltisw 4, 12
11364; PWR7-NEXT:    vslw 3, 3, 5
11365; PWR7-NEXT:    vadduwm 2, 2, 3
11366; PWR7-NEXT:    vadduwm 3, 4, 4
11367; PWR7-NEXT:    vsrw 2, 2, 3
11368; PWR7-NEXT:    vspltisw 3, 13
11369; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
11482; PWR7-NEXT:    vsrw 3, 2, 3
11483; PWR7-NEXT:    addi 3, 3, .LCPI96_1@toc@l
11484; PWR7-NEXT:    vspltisb 0, 15
11485; PWR7-NEXT:    xxland 35, 35, 0
11486; PWR7-NEXT:    lxvw4x 0, 0, 3
11487; PWR7-NEXT:    vsubuwm 2, 2, 3
11488; PWR7-NEXT:    vsrw 3, 2, 4
11489; PWR7-NEXT:    xxland 34, 34, 0
11490; PWR7-NEXT:    vspltisw 4, 4
11491; PWR7-NEXT:    xxland 35, 35, 0
11492; PWR7-NEXT:    vadduwm 2, 2, 3
11493; PWR7-NEXT:    vsrw 3, 2, 4
11494; PWR7-NEXT:    vspltisb 4, 1
11495; PWR7-NEXT:    vrlw 1, 4, 5
11496; PWR7-NEXT:    vadduwm 2, 2, 3
11497; PWR7-NEXT:    xxlxor 35, 35, 35
11498; PWR7-NEXT:    xxland 34, 34, 32
11499; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11500; PWR7-NEXT:    vmulouh 2, 2, 4
11501; PWR7-NEXT:    vspltisw 4, 12
11502; PWR7-NEXT:    vslw 3, 3, 5
11503; PWR7-NEXT:    vadduwm 2, 2, 3
11504; PWR7-NEXT:    vadduwm 3, 4, 4
11505; PWR7-NEXT:    vsrw 2, 2, 3
11506; PWR7-NEXT:    vspltisw 3, 13
11507; PWR7-NEXT:    vsubuwm 3, 3, 5
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, -16
11620; PWR7-NEXT:    vsrw 3, 2, 3
11621; PWR7-NEXT:    addi 3, 3, .LCPI97_1@toc@l
11622; PWR7-NEXT:    vspltisb 0, 15
11623; PWR7-NEXT:    xxland 35, 35, 0
11624; PWR7-NEXT:    lxvw4x 0, 0, 3
11625; PWR7-NEXT:    vsubuwm 2, 2, 3
11626; PWR7-NEXT:    vsrw 3, 2, 4
11627; PWR7-NEXT:    xxland 34, 34, 0
11628; PWR7-NEXT:    vspltisw 4, 4
11629; PWR7-NEXT:    xxland 35, 35, 0
11630; PWR7-NEXT:    vadduwm 2, 2, 3
11631; PWR7-NEXT:    vsrw 3, 2, 4
11632; PWR7-NEXT:    vspltisb 4, 1
11633; PWR7-NEXT:    vrlw 1, 4, 5
11634; PWR7-NEXT:    vadduwm 2, 2, 3
11635; PWR7-NEXT:    xxlxor 35, 35, 35
11636; PWR7-NEXT:    xxland 34, 34, 32
11637; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11638; PWR7-NEXT:    vmulouh 2, 2, 4
11639; PWR7-NEXT:    vspltisw 4, 12
11640; PWR7-NEXT:    vslw 3, 3, 5
11641; PWR7-NEXT:    vadduwm 2, 2, 3
11642; PWR7-NEXT:    vadduwm 3, 4, 4
11643; PWR7-NEXT:    vsrw 2, 2, 3
11644; PWR7-NEXT:    vspltisw 3, 15
11645; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
11756; PWR7-NEXT:    vsrw 3, 2, 3
11757; PWR7-NEXT:    addi 3, 3, .LCPI98_1@toc@l
11758; PWR7-NEXT:    vspltisb 0, 15
11759; PWR7-NEXT:    xxland 35, 35, 0
11760; PWR7-NEXT:    lxvw4x 0, 0, 3
11761; PWR7-NEXT:    vsubuwm 2, 2, 3
11762; PWR7-NEXT:    vsrw 3, 2, 4
11763; PWR7-NEXT:    xxland 34, 34, 0
11764; PWR7-NEXT:    vspltisw 4, 4
11765; PWR7-NEXT:    xxland 35, 35, 0
11766; PWR7-NEXT:    vadduwm 2, 2, 3
11767; PWR7-NEXT:    vsrw 3, 2, 4
11768; PWR7-NEXT:    vspltisb 4, 1
11769; PWR7-NEXT:    vrlw 1, 4, 5
11770; PWR7-NEXT:    vadduwm 2, 2, 3
11771; PWR7-NEXT:    xxlxor 35, 35, 35
11772; PWR7-NEXT:    xxland 34, 34, 32
11773; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11774; PWR7-NEXT:    vmulouh 2, 2, 4
11775; PWR7-NEXT:    vspltisw 4, 12
11776; PWR7-NEXT:    vslw 3, 3, 5
11777; PWR7-NEXT:    vadduwm 2, 2, 3
11778; PWR7-NEXT:    vadduwm 3, 4, 4
11779; PWR7-NEXT:    vsrw 2, 2, 3
11780; PWR7-NEXT:    vspltisw 3, 15
11781; PWR7-NEXT:    vadduwm 3, 3, 3
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, -16
11892; PWR7-NEXT:    vsrw 3, 2, 3
11893; PWR7-NEXT:    addi 3, 3, .LCPI99_1@toc@l
11894; PWR7-NEXT:    vspltisb 0, 15
11895; PWR7-NEXT:    xxland 35, 35, 0
11896; PWR7-NEXT:    lxvw4x 0, 0, 3
11897; PWR7-NEXT:    vsubuwm 2, 2, 3
11898; PWR7-NEXT:    vsrw 3, 2, 4
11899; PWR7-NEXT:    xxland 34, 34, 0
11900; PWR7-NEXT:    vspltisw 4, 4
11901; PWR7-NEXT:    xxland 35, 35, 0
11902; PWR7-NEXT:    vadduwm 2, 2, 3
11903; PWR7-NEXT:    vsrw 3, 2, 4
11904; PWR7-NEXT:    vspltisb 4, 1
11905; PWR7-NEXT:    vrlw 1, 4, 5
11906; PWR7-NEXT:    vadduwm 2, 2, 3
11907; PWR7-NEXT:    xxlxor 35, 35, 35
11908; PWR7-NEXT:    xxland 34, 34, 32
11909; PWR7-NEXT:    vmsumuhm 3, 2, 1, 3
11910; PWR7-NEXT:    vmulouh 2, 2, 4
11911; PWR7-NEXT:    vspltisw 4, 12
11912; PWR7-NEXT:    vslw 3, 3, 5
11913; PWR7-NEXT:    vadduwm 2, 2, 3
11914; PWR7-NEXT:    vadduwm 3, 4, 4
11915; PWR7-NEXT:    vsrw 2, 2, 3
11916; PWR7-NEXT:    vspltisw 3, 15
11917; PWR7-NEXT:    vsubuwm 3, 3, 5
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:    stxvd2x 34, 0, 3
11973; PWR7-NEXT:    ld 3, -24(1)
11974; PWR7-NEXT:    addi 3, 3, -1
11975; PWR7-NEXT:    std 3, -8(1)
11976; PWR7-NEXT:    ld 3, -32(1)
11977; PWR7-NEXT:    addi 3, 3, -1
11978; PWR7-NEXT:    std 3, -16(1)
11979; PWR7-NEXT:    addi 3, 1, -16
11980; PWR7-NEXT:    lxvw4x 0, 0, 3
11981; PWR7-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
11982; PWR7-NEXT:    addi 3, 3, .LCPI100_0@toc@l
11983; PWR7-NEXT:    lxvw4x 35, 0, 3
11984; PWR7-NEXT:    xxland 34, 34, 0
11985; PWR7-NEXT:    vcmpequw 2, 2, 3
11986; PWR7-NEXT:    xxlnor 34, 34, 34
11987; PWR7-NEXT:    blr
11988;
11989; PWR8-LABEL: ugt_1_v2i64:
11990; PWR8:       # %bb.0:
11991; PWR8-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
11992; PWR8-NEXT:    vpopcntd 2, 2
11993; PWR8-NEXT:    addi 3, 3, .LCPI100_0@toc@l
11994; PWR8-NEXT:    lxvd2x 35, 0, 3
11995; PWR8-NEXT:    vcmpgtud 2, 2, 3
11996; PWR8-NEXT:    blr
11997;
11998; PWR9-LABEL: ugt_1_v2i64:
11999; PWR9:       # %bb.0:
12000; PWR9-NEXT:    addis 3, 2, .LCPI100_0@toc@ha
12001; PWR9-NEXT:    vpopcntd 2, 2
12002; PWR9-NEXT:    addi 3, 3, .LCPI100_0@toc@l
12003; PWR9-NEXT:    lxvx 35, 0, 3
12004; PWR9-NEXT:    vcmpgtud 2, 2, 3
12005; PWR9-NEXT:    blr
12006  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12007  %3 = icmp ugt <2 x i64> %2, <i64 1, i64 1>
12008  %4 = sext <2 x i1> %3 to <2 x i64>
12009  ret <2 x i64> %4
12010}
12011
12012define <2 x i64> @ult_2_v2i64(<2 x i64> %0) {
12013; PWR5-LABEL: ult_2_v2i64:
12014; PWR5:       # %bb.0:
12015; PWR5-NEXT:    addi 5, 3, -1
12016; PWR5-NEXT:    and 3, 3, 5
12017; PWR5-NEXT:    addi 5, 4, -1
12018; PWR5-NEXT:    addic 3, 3, -1
12019; PWR5-NEXT:    subfe 3, 3, 3
12020; PWR5-NEXT:    and 4, 4, 5
12021; PWR5-NEXT:    addic 4, 4, -1
12022; PWR5-NEXT:    subfe 4, 4, 4
12023; PWR5-NEXT:    blr
12024;
12025; PWR6-LABEL: ult_2_v2i64:
12026; PWR6:       # %bb.0:
12027; PWR6-NEXT:    addi 5, 3, -1
12028; PWR6-NEXT:    and 3, 3, 5
12029; PWR6-NEXT:    addi 5, 4, -1
12030; PWR6-NEXT:    addic 3, 3, -1
12031; PWR6-NEXT:    subfe 3, 3, 3
12032; PWR6-NEXT:    and 4, 4, 5
12033; PWR6-NEXT:    addic 4, 4, -1
12034; PWR6-NEXT:    subfe 4, 4, 4
12035; PWR6-NEXT:    blr
12036;
12037; PWR7-LABEL: ult_2_v2i64:
12038; PWR7:       # %bb.0:
12039; PWR7-NEXT:    addi 3, 1, -32
12040; PWR7-NEXT:    stxvd2x 34, 0, 3
12041; PWR7-NEXT:    ld 3, -24(1)
12042; PWR7-NEXT:    addi 3, 3, -1
12043; PWR7-NEXT:    std 3, -8(1)
12044; PWR7-NEXT:    ld 3, -32(1)
12045; PWR7-NEXT:    addi 3, 3, -1
12046; PWR7-NEXT:    std 3, -16(1)
12047; PWR7-NEXT:    addi 3, 1, -16
12048; PWR7-NEXT:    lxvw4x 0, 0, 3
12049; PWR7-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12050; PWR7-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12051; PWR7-NEXT:    lxvw4x 35, 0, 3
12052; PWR7-NEXT:    xxland 34, 34, 0
12053; PWR7-NEXT:    vcmpequw 2, 2, 3
12054; PWR7-NEXT:    blr
12055;
12056; PWR8-LABEL: ult_2_v2i64:
12057; PWR8:       # %bb.0:
12058; PWR8-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12059; PWR8-NEXT:    vpopcntd 2, 2
12060; PWR8-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12061; PWR8-NEXT:    lxvd2x 35, 0, 3
12062; PWR8-NEXT:    vcmpgtud 2, 3, 2
12063; PWR8-NEXT:    blr
12064;
12065; PWR9-LABEL: ult_2_v2i64:
12066; PWR9:       # %bb.0:
12067; PWR9-NEXT:    addis 3, 2, .LCPI101_0@toc@ha
12068; PWR9-NEXT:    vpopcntd 2, 2
12069; PWR9-NEXT:    addi 3, 3, .LCPI101_0@toc@l
12070; PWR9-NEXT:    lxvx 35, 0, 3
12071; PWR9-NEXT:    vcmpgtud 2, 3, 2
12072; PWR9-NEXT:    blr
12073  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12074  %3 = icmp ult <2 x i64> %2, <i64 2, i64 2>
12075  %4 = sext <2 x i1> %3 to <2 x i64>
12076  ret <2 x i64> %4
12077}
12078
12079define <2 x i64> @ugt_2_v2i64(<2 x i64> %0) {
12080; PWR5-LABEL: ugt_2_v2i64:
12081; PWR5:       # %bb.0:
12082; PWR5-NEXT:    lis 5, 21845
12083; PWR5-NEXT:    lis 6, 13107
12084; PWR5-NEXT:    ori 5, 5, 21845
12085; PWR5-NEXT:    rotldi 8, 4, 63
12086; PWR5-NEXT:    rotldi 9, 3, 63
12087; PWR5-NEXT:    rldimi 5, 5, 32, 0
12088; PWR5-NEXT:    and 8, 8, 5
12089; PWR5-NEXT:    and 5, 9, 5
12090; PWR5-NEXT:    ori 6, 6, 13107
12091; PWR5-NEXT:    sub 3, 3, 5
12092; PWR5-NEXT:    rldimi 6, 6, 32, 0
12093; PWR5-NEXT:    sub 4, 4, 8
12094; PWR5-NEXT:    and 8, 3, 6
12095; PWR5-NEXT:    rotldi 3, 3, 62
12096; PWR5-NEXT:    and 3, 3, 6
12097; PWR5-NEXT:    lis 7, 3855
12098; PWR5-NEXT:    and 5, 4, 6
12099; PWR5-NEXT:    rotldi 4, 4, 62
12100; PWR5-NEXT:    add 3, 8, 3
12101; PWR5-NEXT:    lis 9, 257
12102; PWR5-NEXT:    ori 7, 7, 3855
12103; PWR5-NEXT:    and 4, 4, 6
12104; PWR5-NEXT:    rldicl 6, 3, 60, 4
12105; PWR5-NEXT:    ori 9, 9, 257
12106; PWR5-NEXT:    rldimi 7, 7, 32, 0
12107; PWR5-NEXT:    add 4, 5, 4
12108; PWR5-NEXT:    add 3, 3, 6
12109; PWR5-NEXT:    rldimi 9, 9, 32, 0
12110; PWR5-NEXT:    rldicl 5, 4, 60, 4
12111; PWR5-NEXT:    and 3, 3, 7
12112; PWR5-NEXT:    add 4, 4, 5
12113; PWR5-NEXT:    mulld 3, 3, 9
12114; PWR5-NEXT:    and 4, 4, 7
12115; PWR5-NEXT:    rldicl 3, 3, 8, 56
12116; PWR5-NEXT:    mulld 4, 4, 9
12117; PWR5-NEXT:    li 5, 2
12118; PWR5-NEXT:    subfic 3, 3, 2
12119; PWR5-NEXT:    rldicl 4, 4, 8, 56
12120; PWR5-NEXT:    subfe 3, 5, 5
12121; PWR5-NEXT:    subfic 4, 4, 2
12122; PWR5-NEXT:    subfe 4, 5, 5
12123; PWR5-NEXT:    blr
12124;
12125; PWR6-LABEL: ugt_2_v2i64:
12126; PWR6:       # %bb.0:
12127; PWR6-NEXT:    lis 5, 21845
12128; PWR6-NEXT:    lis 6, 13107
12129; PWR6-NEXT:    ori 5, 5, 21845
12130; PWR6-NEXT:    rotldi 8, 4, 63
12131; PWR6-NEXT:    rotldi 9, 3, 63
12132; PWR6-NEXT:    rldimi 5, 5, 32, 0
12133; PWR6-NEXT:    and 8, 8, 5
12134; PWR6-NEXT:    and 5, 9, 5
12135; PWR6-NEXT:    ori 6, 6, 13107
12136; PWR6-NEXT:    sub 3, 3, 5
12137; PWR6-NEXT:    rldimi 6, 6, 32, 0
12138; PWR6-NEXT:    sub 4, 4, 8
12139; PWR6-NEXT:    and 8, 3, 6
12140; PWR6-NEXT:    rotldi 3, 3, 62
12141; PWR6-NEXT:    and 3, 3, 6
12142; PWR6-NEXT:    lis 7, 3855
12143; PWR6-NEXT:    and 5, 4, 6
12144; PWR6-NEXT:    rotldi 4, 4, 62
12145; PWR6-NEXT:    add 3, 8, 3
12146; PWR6-NEXT:    lis 9, 257
12147; PWR6-NEXT:    ori 7, 7, 3855
12148; PWR6-NEXT:    and 4, 4, 6
12149; PWR6-NEXT:    rldicl 6, 3, 60, 4
12150; PWR6-NEXT:    ori 9, 9, 257
12151; PWR6-NEXT:    rldimi 7, 7, 32, 0
12152; PWR6-NEXT:    add 4, 5, 4
12153; PWR6-NEXT:    add 3, 3, 6
12154; PWR6-NEXT:    rldimi 9, 9, 32, 0
12155; PWR6-NEXT:    rldicl 5, 4, 60, 4
12156; PWR6-NEXT:    and 3, 3, 7
12157; PWR6-NEXT:    add 4, 4, 5
12158; PWR6-NEXT:    mulld 3, 3, 9
12159; PWR6-NEXT:    and 4, 4, 7
12160; PWR6-NEXT:    rldicl 3, 3, 8, 56
12161; PWR6-NEXT:    mulld 4, 4, 9
12162; PWR6-NEXT:    li 5, 2
12163; PWR6-NEXT:    subfic 3, 3, 2
12164; PWR6-NEXT:    rldicl 4, 4, 8, 56
12165; PWR6-NEXT:    subfe 3, 5, 5
12166; PWR6-NEXT:    subfic 4, 4, 2
12167; PWR6-NEXT:    subfe 4, 5, 5
12168; PWR6-NEXT:    blr
12169;
12170; PWR7-LABEL: ugt_2_v2i64:
12171; PWR7:       # %bb.0:
12172; PWR7-NEXT:    addi 3, 1, -32
12173; PWR7-NEXT:    li 5, 0
12174; PWR7-NEXT:    li 6, -1
12175; PWR7-NEXT:    stxvd2x 34, 0, 3
12176; PWR7-NEXT:    ld 3, -24(1)
12177; PWR7-NEXT:    ld 4, -32(1)
12178; PWR7-NEXT:    popcntd 3, 3
12179; PWR7-NEXT:    popcntd 4, 4
12180; PWR7-NEXT:    cmpldi 3, 2
12181; PWR7-NEXT:    iselgt 3, 6, 5
12182; PWR7-NEXT:    cmpldi 4, 2
12183; PWR7-NEXT:    iselgt 4, 6, 5
12184; PWR7-NEXT:    std 3, -8(1)
12185; PWR7-NEXT:    addi 3, 1, -16
12186; PWR7-NEXT:    std 4, -16(1)
12187; PWR7-NEXT:    lxvd2x 34, 0, 3
12188; PWR7-NEXT:    blr
12189;
12190; PWR8-LABEL: ugt_2_v2i64:
12191; PWR8:       # %bb.0:
12192; PWR8-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
12193; PWR8-NEXT:    vpopcntd 2, 2
12194; PWR8-NEXT:    addi 3, 3, .LCPI102_0@toc@l
12195; PWR8-NEXT:    lxvd2x 35, 0, 3
12196; PWR8-NEXT:    vcmpgtud 2, 2, 3
12197; PWR8-NEXT:    blr
12198;
12199; PWR9-LABEL: ugt_2_v2i64:
12200; PWR9:       # %bb.0:
12201; PWR9-NEXT:    addis 3, 2, .LCPI102_0@toc@ha
12202; PWR9-NEXT:    vpopcntd 2, 2
12203; PWR9-NEXT:    addi 3, 3, .LCPI102_0@toc@l
12204; PWR9-NEXT:    lxvx 35, 0, 3
12205; PWR9-NEXT:    vcmpgtud 2, 2, 3
12206; PWR9-NEXT:    blr
12207  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12208  %3 = icmp ugt <2 x i64> %2, <i64 2, i64 2>
12209  %4 = sext <2 x i1> %3 to <2 x i64>
12210  ret <2 x i64> %4
12211}
12212
12213define <2 x i64> @ult_3_v2i64(<2 x i64> %0) {
12214; PWR5-LABEL: ult_3_v2i64:
12215; PWR5:       # %bb.0:
12216; PWR5-NEXT:    lis 5, 21845
12217; PWR5-NEXT:    lis 6, 13107
12218; PWR5-NEXT:    ori 5, 5, 21845
12219; PWR5-NEXT:    rotldi 8, 4, 63
12220; PWR5-NEXT:    rotldi 9, 3, 63
12221; PWR5-NEXT:    rldimi 5, 5, 32, 0
12222; PWR5-NEXT:    and 8, 8, 5
12223; PWR5-NEXT:    and 5, 9, 5
12224; PWR5-NEXT:    ori 6, 6, 13107
12225; PWR5-NEXT:    sub 3, 3, 5
12226; PWR5-NEXT:    rldimi 6, 6, 32, 0
12227; PWR5-NEXT:    sub 4, 4, 8
12228; PWR5-NEXT:    and 8, 3, 6
12229; PWR5-NEXT:    rotldi 3, 3, 62
12230; PWR5-NEXT:    and 3, 3, 6
12231; PWR5-NEXT:    lis 7, 3855
12232; PWR5-NEXT:    and 5, 4, 6
12233; PWR5-NEXT:    rotldi 4, 4, 62
12234; PWR5-NEXT:    add 3, 8, 3
12235; PWR5-NEXT:    lis 9, 257
12236; PWR5-NEXT:    ori 7, 7, 3855
12237; PWR5-NEXT:    and 4, 4, 6
12238; PWR5-NEXT:    rldicl 6, 3, 60, 4
12239; PWR5-NEXT:    ori 9, 9, 257
12240; PWR5-NEXT:    rldimi 7, 7, 32, 0
12241; PWR5-NEXT:    add 4, 5, 4
12242; PWR5-NEXT:    add 3, 3, 6
12243; PWR5-NEXT:    rldimi 9, 9, 32, 0
12244; PWR5-NEXT:    rldicl 5, 4, 60, 4
12245; PWR5-NEXT:    and 3, 3, 7
12246; PWR5-NEXT:    add 4, 4, 5
12247; PWR5-NEXT:    mulld 3, 3, 9
12248; PWR5-NEXT:    and 4, 4, 7
12249; PWR5-NEXT:    rldicl 3, 3, 8, 56
12250; PWR5-NEXT:    li 5, 3
12251; PWR5-NEXT:    mulld 4, 4, 9
12252; PWR5-NEXT:    subc 6, 3, 5
12253; PWR5-NEXT:    rldicl 4, 4, 8, 56
12254; PWR5-NEXT:    subfe 3, 3, 3
12255; PWR5-NEXT:    subc 5, 4, 5
12256; PWR5-NEXT:    subfe 4, 4, 4
12257; PWR5-NEXT:    blr
12258;
12259; PWR6-LABEL: ult_3_v2i64:
12260; PWR6:       # %bb.0:
12261; PWR6-NEXT:    lis 5, 21845
12262; PWR6-NEXT:    lis 6, 13107
12263; PWR6-NEXT:    ori 5, 5, 21845
12264; PWR6-NEXT:    rotldi 8, 4, 63
12265; PWR6-NEXT:    rotldi 9, 3, 63
12266; PWR6-NEXT:    rldimi 5, 5, 32, 0
12267; PWR6-NEXT:    and 8, 8, 5
12268; PWR6-NEXT:    and 5, 9, 5
12269; PWR6-NEXT:    ori 6, 6, 13107
12270; PWR6-NEXT:    sub 3, 3, 5
12271; PWR6-NEXT:    rldimi 6, 6, 32, 0
12272; PWR6-NEXT:    sub 4, 4, 8
12273; PWR6-NEXT:    and 8, 3, 6
12274; PWR6-NEXT:    rotldi 3, 3, 62
12275; PWR6-NEXT:    and 3, 3, 6
12276; PWR6-NEXT:    lis 7, 3855
12277; PWR6-NEXT:    and 5, 4, 6
12278; PWR6-NEXT:    rotldi 4, 4, 62
12279; PWR6-NEXT:    add 3, 8, 3
12280; PWR6-NEXT:    lis 9, 257
12281; PWR6-NEXT:    ori 7, 7, 3855
12282; PWR6-NEXT:    and 4, 4, 6
12283; PWR6-NEXT:    rldicl 6, 3, 60, 4
12284; PWR6-NEXT:    ori 9, 9, 257
12285; PWR6-NEXT:    rldimi 7, 7, 32, 0
12286; PWR6-NEXT:    add 4, 5, 4
12287; PWR6-NEXT:    add 3, 3, 6
12288; PWR6-NEXT:    rldimi 9, 9, 32, 0
12289; PWR6-NEXT:    rldicl 5, 4, 60, 4
12290; PWR6-NEXT:    and 3, 3, 7
12291; PWR6-NEXT:    add 4, 4, 5
12292; PWR6-NEXT:    mulld 3, 3, 9
12293; PWR6-NEXT:    and 4, 4, 7
12294; PWR6-NEXT:    rldicl 3, 3, 8, 56
12295; PWR6-NEXT:    li 5, 3
12296; PWR6-NEXT:    mulld 4, 4, 9
12297; PWR6-NEXT:    subc 6, 3, 5
12298; PWR6-NEXT:    rldicl 4, 4, 8, 56
12299; PWR6-NEXT:    subfe 3, 3, 3
12300; PWR6-NEXT:    subc 5, 4, 5
12301; PWR6-NEXT:    subfe 4, 4, 4
12302; PWR6-NEXT:    blr
12303;
12304; PWR7-LABEL: ult_3_v2i64:
12305; PWR7:       # %bb.0:
12306; PWR7-NEXT:    addi 3, 1, -32
12307; PWR7-NEXT:    li 5, 0
12308; PWR7-NEXT:    li 6, -1
12309; PWR7-NEXT:    stxvd2x 34, 0, 3
12310; PWR7-NEXT:    ld 3, -24(1)
12311; PWR7-NEXT:    ld 4, -32(1)
12312; PWR7-NEXT:    popcntd 3, 3
12313; PWR7-NEXT:    popcntd 4, 4
12314; PWR7-NEXT:    cmpldi 3, 3
12315; PWR7-NEXT:    isellt 3, 6, 5
12316; PWR7-NEXT:    cmpldi 4, 3
12317; PWR7-NEXT:    isellt 4, 6, 5
12318; PWR7-NEXT:    std 3, -8(1)
12319; PWR7-NEXT:    addi 3, 1, -16
12320; PWR7-NEXT:    std 4, -16(1)
12321; PWR7-NEXT:    lxvd2x 34, 0, 3
12322; PWR7-NEXT:    blr
12323;
12324; PWR8-LABEL: ult_3_v2i64:
12325; PWR8:       # %bb.0:
12326; PWR8-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
12327; PWR8-NEXT:    vpopcntd 2, 2
12328; PWR8-NEXT:    addi 3, 3, .LCPI103_0@toc@l
12329; PWR8-NEXT:    lxvd2x 35, 0, 3
12330; PWR8-NEXT:    vcmpgtud 2, 3, 2
12331; PWR8-NEXT:    blr
12332;
12333; PWR9-LABEL: ult_3_v2i64:
12334; PWR9:       # %bb.0:
12335; PWR9-NEXT:    addis 3, 2, .LCPI103_0@toc@ha
12336; PWR9-NEXT:    vpopcntd 2, 2
12337; PWR9-NEXT:    addi 3, 3, .LCPI103_0@toc@l
12338; PWR9-NEXT:    lxvx 35, 0, 3
12339; PWR9-NEXT:    vcmpgtud 2, 3, 2
12340; PWR9-NEXT:    blr
12341  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12342  %3 = icmp ult <2 x i64> %2, <i64 3, i64 3>
12343  %4 = sext <2 x i1> %3 to <2 x i64>
12344  ret <2 x i64> %4
12345}
12346
12347define <2 x i64> @ugt_3_v2i64(<2 x i64> %0) {
12348; PWR5-LABEL: ugt_3_v2i64:
12349; PWR5:       # %bb.0:
12350; PWR5-NEXT:    lis 5, 21845
12351; PWR5-NEXT:    lis 6, 13107
12352; PWR5-NEXT:    ori 5, 5, 21845
12353; PWR5-NEXT:    rotldi 8, 4, 63
12354; PWR5-NEXT:    rotldi 9, 3, 63
12355; PWR5-NEXT:    rldimi 5, 5, 32, 0
12356; PWR5-NEXT:    and 8, 8, 5
12357; PWR5-NEXT:    and 5, 9, 5
12358; PWR5-NEXT:    ori 6, 6, 13107
12359; PWR5-NEXT:    sub 3, 3, 5
12360; PWR5-NEXT:    rldimi 6, 6, 32, 0
12361; PWR5-NEXT:    sub 4, 4, 8
12362; PWR5-NEXT:    and 8, 3, 6
12363; PWR5-NEXT:    rotldi 3, 3, 62
12364; PWR5-NEXT:    and 3, 3, 6
12365; PWR5-NEXT:    lis 7, 3855
12366; PWR5-NEXT:    and 5, 4, 6
12367; PWR5-NEXT:    rotldi 4, 4, 62
12368; PWR5-NEXT:    add 3, 8, 3
12369; PWR5-NEXT:    lis 9, 257
12370; PWR5-NEXT:    ori 7, 7, 3855
12371; PWR5-NEXT:    and 4, 4, 6
12372; PWR5-NEXT:    rldicl 6, 3, 60, 4
12373; PWR5-NEXT:    ori 9, 9, 257
12374; PWR5-NEXT:    rldimi 7, 7, 32, 0
12375; PWR5-NEXT:    add 4, 5, 4
12376; PWR5-NEXT:    add 3, 3, 6
12377; PWR5-NEXT:    rldimi 9, 9, 32, 0
12378; PWR5-NEXT:    rldicl 5, 4, 60, 4
12379; PWR5-NEXT:    and 3, 3, 7
12380; PWR5-NEXT:    add 4, 4, 5
12381; PWR5-NEXT:    mulld 3, 3, 9
12382; PWR5-NEXT:    and 4, 4, 7
12383; PWR5-NEXT:    rldicl 3, 3, 8, 56
12384; PWR5-NEXT:    mulld 4, 4, 9
12385; PWR5-NEXT:    li 5, 3
12386; PWR5-NEXT:    subfic 3, 3, 3
12387; PWR5-NEXT:    rldicl 4, 4, 8, 56
12388; PWR5-NEXT:    subfe 3, 5, 5
12389; PWR5-NEXT:    subfic 4, 4, 3
12390; PWR5-NEXT:    subfe 4, 5, 5
12391; PWR5-NEXT:    blr
12392;
12393; PWR6-LABEL: ugt_3_v2i64:
12394; PWR6:       # %bb.0:
12395; PWR6-NEXT:    lis 5, 21845
12396; PWR6-NEXT:    lis 6, 13107
12397; PWR6-NEXT:    ori 5, 5, 21845
12398; PWR6-NEXT:    rotldi 8, 4, 63
12399; PWR6-NEXT:    rotldi 9, 3, 63
12400; PWR6-NEXT:    rldimi 5, 5, 32, 0
12401; PWR6-NEXT:    and 8, 8, 5
12402; PWR6-NEXT:    and 5, 9, 5
12403; PWR6-NEXT:    ori 6, 6, 13107
12404; PWR6-NEXT:    sub 3, 3, 5
12405; PWR6-NEXT:    rldimi 6, 6, 32, 0
12406; PWR6-NEXT:    sub 4, 4, 8
12407; PWR6-NEXT:    and 8, 3, 6
12408; PWR6-NEXT:    rotldi 3, 3, 62
12409; PWR6-NEXT:    and 3, 3, 6
12410; PWR6-NEXT:    lis 7, 3855
12411; PWR6-NEXT:    and 5, 4, 6
12412; PWR6-NEXT:    rotldi 4, 4, 62
12413; PWR6-NEXT:    add 3, 8, 3
12414; PWR6-NEXT:    lis 9, 257
12415; PWR6-NEXT:    ori 7, 7, 3855
12416; PWR6-NEXT:    and 4, 4, 6
12417; PWR6-NEXT:    rldicl 6, 3, 60, 4
12418; PWR6-NEXT:    ori 9, 9, 257
12419; PWR6-NEXT:    rldimi 7, 7, 32, 0
12420; PWR6-NEXT:    add 4, 5, 4
12421; PWR6-NEXT:    add 3, 3, 6
12422; PWR6-NEXT:    rldimi 9, 9, 32, 0
12423; PWR6-NEXT:    rldicl 5, 4, 60, 4
12424; PWR6-NEXT:    and 3, 3, 7
12425; PWR6-NEXT:    add 4, 4, 5
12426; PWR6-NEXT:    mulld 3, 3, 9
12427; PWR6-NEXT:    and 4, 4, 7
12428; PWR6-NEXT:    rldicl 3, 3, 8, 56
12429; PWR6-NEXT:    mulld 4, 4, 9
12430; PWR6-NEXT:    li 5, 3
12431; PWR6-NEXT:    subfic 3, 3, 3
12432; PWR6-NEXT:    rldicl 4, 4, 8, 56
12433; PWR6-NEXT:    subfe 3, 5, 5
12434; PWR6-NEXT:    subfic 4, 4, 3
12435; PWR6-NEXT:    subfe 4, 5, 5
12436; PWR6-NEXT:    blr
12437;
12438; PWR7-LABEL: ugt_3_v2i64:
12439; PWR7:       # %bb.0:
12440; PWR7-NEXT:    addi 3, 1, -32
12441; PWR7-NEXT:    li 5, 0
12442; PWR7-NEXT:    li 6, -1
12443; PWR7-NEXT:    stxvd2x 34, 0, 3
12444; PWR7-NEXT:    ld 3, -24(1)
12445; PWR7-NEXT:    ld 4, -32(1)
12446; PWR7-NEXT:    popcntd 3, 3
12447; PWR7-NEXT:    popcntd 4, 4
12448; PWR7-NEXT:    cmpldi 3, 3
12449; PWR7-NEXT:    iselgt 3, 6, 5
12450; PWR7-NEXT:    cmpldi 4, 3
12451; PWR7-NEXT:    iselgt 4, 6, 5
12452; PWR7-NEXT:    std 3, -8(1)
12453; PWR7-NEXT:    addi 3, 1, -16
12454; PWR7-NEXT:    std 4, -16(1)
12455; PWR7-NEXT:    lxvd2x 34, 0, 3
12456; PWR7-NEXT:    blr
12457;
12458; PWR8-LABEL: ugt_3_v2i64:
12459; PWR8:       # %bb.0:
12460; PWR8-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
12461; PWR8-NEXT:    vpopcntd 2, 2
12462; PWR8-NEXT:    addi 3, 3, .LCPI104_0@toc@l
12463; PWR8-NEXT:    lxvd2x 35, 0, 3
12464; PWR8-NEXT:    vcmpgtud 2, 2, 3
12465; PWR8-NEXT:    blr
12466;
12467; PWR9-LABEL: ugt_3_v2i64:
12468; PWR9:       # %bb.0:
12469; PWR9-NEXT:    addis 3, 2, .LCPI104_0@toc@ha
12470; PWR9-NEXT:    vpopcntd 2, 2
12471; PWR9-NEXT:    addi 3, 3, .LCPI104_0@toc@l
12472; PWR9-NEXT:    lxvx 35, 0, 3
12473; PWR9-NEXT:    vcmpgtud 2, 2, 3
12474; PWR9-NEXT:    blr
12475  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12476  %3 = icmp ugt <2 x i64> %2, <i64 3, i64 3>
12477  %4 = sext <2 x i1> %3 to <2 x i64>
12478  ret <2 x i64> %4
12479}
12480
12481define <2 x i64> @ult_4_v2i64(<2 x i64> %0) {
12482; PWR5-LABEL: ult_4_v2i64:
12483; PWR5:       # %bb.0:
12484; PWR5-NEXT:    lis 5, 21845
12485; PWR5-NEXT:    lis 6, 13107
12486; PWR5-NEXT:    ori 5, 5, 21845
12487; PWR5-NEXT:    rotldi 8, 4, 63
12488; PWR5-NEXT:    rotldi 9, 3, 63
12489; PWR5-NEXT:    rldimi 5, 5, 32, 0
12490; PWR5-NEXT:    and 8, 8, 5
12491; PWR5-NEXT:    and 5, 9, 5
12492; PWR5-NEXT:    ori 6, 6, 13107
12493; PWR5-NEXT:    sub 3, 3, 5
12494; PWR5-NEXT:    rldimi 6, 6, 32, 0
12495; PWR5-NEXT:    sub 4, 4, 8
12496; PWR5-NEXT:    and 8, 3, 6
12497; PWR5-NEXT:    rotldi 3, 3, 62
12498; PWR5-NEXT:    and 3, 3, 6
12499; PWR5-NEXT:    lis 7, 3855
12500; PWR5-NEXT:    and 5, 4, 6
12501; PWR5-NEXT:    rotldi 4, 4, 62
12502; PWR5-NEXT:    add 3, 8, 3
12503; PWR5-NEXT:    lis 9, 257
12504; PWR5-NEXT:    ori 7, 7, 3855
12505; PWR5-NEXT:    and 4, 4, 6
12506; PWR5-NEXT:    rldicl 6, 3, 60, 4
12507; PWR5-NEXT:    ori 9, 9, 257
12508; PWR5-NEXT:    rldimi 7, 7, 32, 0
12509; PWR5-NEXT:    add 4, 5, 4
12510; PWR5-NEXT:    add 3, 3, 6
12511; PWR5-NEXT:    rldimi 9, 9, 32, 0
12512; PWR5-NEXT:    rldicl 5, 4, 60, 4
12513; PWR5-NEXT:    and 3, 3, 7
12514; PWR5-NEXT:    add 4, 4, 5
12515; PWR5-NEXT:    mulld 3, 3, 9
12516; PWR5-NEXT:    and 4, 4, 7
12517; PWR5-NEXT:    rldicl 3, 3, 8, 56
12518; PWR5-NEXT:    li 5, 4
12519; PWR5-NEXT:    mulld 4, 4, 9
12520; PWR5-NEXT:    subc 6, 3, 5
12521; PWR5-NEXT:    rldicl 4, 4, 8, 56
12522; PWR5-NEXT:    subfe 3, 3, 3
12523; PWR5-NEXT:    subc 5, 4, 5
12524; PWR5-NEXT:    subfe 4, 4, 4
12525; PWR5-NEXT:    blr
12526;
12527; PWR6-LABEL: ult_4_v2i64:
12528; PWR6:       # %bb.0:
12529; PWR6-NEXT:    lis 5, 21845
12530; PWR6-NEXT:    lis 6, 13107
12531; PWR6-NEXT:    ori 5, 5, 21845
12532; PWR6-NEXT:    rotldi 8, 4, 63
12533; PWR6-NEXT:    rotldi 9, 3, 63
12534; PWR6-NEXT:    rldimi 5, 5, 32, 0
12535; PWR6-NEXT:    and 8, 8, 5
12536; PWR6-NEXT:    and 5, 9, 5
12537; PWR6-NEXT:    ori 6, 6, 13107
12538; PWR6-NEXT:    sub 3, 3, 5
12539; PWR6-NEXT:    rldimi 6, 6, 32, 0
12540; PWR6-NEXT:    sub 4, 4, 8
12541; PWR6-NEXT:    and 8, 3, 6
12542; PWR6-NEXT:    rotldi 3, 3, 62
12543; PWR6-NEXT:    and 3, 3, 6
12544; PWR6-NEXT:    lis 7, 3855
12545; PWR6-NEXT:    and 5, 4, 6
12546; PWR6-NEXT:    rotldi 4, 4, 62
12547; PWR6-NEXT:    add 3, 8, 3
12548; PWR6-NEXT:    lis 9, 257
12549; PWR6-NEXT:    ori 7, 7, 3855
12550; PWR6-NEXT:    and 4, 4, 6
12551; PWR6-NEXT:    rldicl 6, 3, 60, 4
12552; PWR6-NEXT:    ori 9, 9, 257
12553; PWR6-NEXT:    rldimi 7, 7, 32, 0
12554; PWR6-NEXT:    add 4, 5, 4
12555; PWR6-NEXT:    add 3, 3, 6
12556; PWR6-NEXT:    rldimi 9, 9, 32, 0
12557; PWR6-NEXT:    rldicl 5, 4, 60, 4
12558; PWR6-NEXT:    and 3, 3, 7
12559; PWR6-NEXT:    add 4, 4, 5
12560; PWR6-NEXT:    mulld 3, 3, 9
12561; PWR6-NEXT:    and 4, 4, 7
12562; PWR6-NEXT:    rldicl 3, 3, 8, 56
12563; PWR6-NEXT:    li 5, 4
12564; PWR6-NEXT:    mulld 4, 4, 9
12565; PWR6-NEXT:    subc 6, 3, 5
12566; PWR6-NEXT:    rldicl 4, 4, 8, 56
12567; PWR6-NEXT:    subfe 3, 3, 3
12568; PWR6-NEXT:    subc 5, 4, 5
12569; PWR6-NEXT:    subfe 4, 4, 4
12570; PWR6-NEXT:    blr
12571;
12572; PWR7-LABEL: ult_4_v2i64:
12573; PWR7:       # %bb.0:
12574; PWR7-NEXT:    addi 3, 1, -32
12575; PWR7-NEXT:    li 5, 0
12576; PWR7-NEXT:    li 6, -1
12577; PWR7-NEXT:    stxvd2x 34, 0, 3
12578; PWR7-NEXT:    ld 3, -24(1)
12579; PWR7-NEXT:    ld 4, -32(1)
12580; PWR7-NEXT:    popcntd 3, 3
12581; PWR7-NEXT:    popcntd 4, 4
12582; PWR7-NEXT:    cmpldi 3, 4
12583; PWR7-NEXT:    isellt 3, 6, 5
12584; PWR7-NEXT:    cmpldi 4, 4
12585; PWR7-NEXT:    isellt 4, 6, 5
12586; PWR7-NEXT:    std 3, -8(1)
12587; PWR7-NEXT:    addi 3, 1, -16
12588; PWR7-NEXT:    std 4, -16(1)
12589; PWR7-NEXT:    lxvd2x 34, 0, 3
12590; PWR7-NEXT:    blr
12591;
12592; PWR8-LABEL: ult_4_v2i64:
12593; PWR8:       # %bb.0:
12594; PWR8-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
12595; PWR8-NEXT:    vpopcntd 2, 2
12596; PWR8-NEXT:    addi 3, 3, .LCPI105_0@toc@l
12597; PWR8-NEXT:    lxvd2x 35, 0, 3
12598; PWR8-NEXT:    vcmpgtud 2, 3, 2
12599; PWR8-NEXT:    blr
12600;
12601; PWR9-LABEL: ult_4_v2i64:
12602; PWR9:       # %bb.0:
12603; PWR9-NEXT:    addis 3, 2, .LCPI105_0@toc@ha
12604; PWR9-NEXT:    vpopcntd 2, 2
12605; PWR9-NEXT:    addi 3, 3, .LCPI105_0@toc@l
12606; PWR9-NEXT:    lxvx 35, 0, 3
12607; PWR9-NEXT:    vcmpgtud 2, 3, 2
12608; PWR9-NEXT:    blr
12609  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12610  %3 = icmp ult <2 x i64> %2, <i64 4, i64 4>
12611  %4 = sext <2 x i1> %3 to <2 x i64>
12612  ret <2 x i64> %4
12613}
12614
12615define <2 x i64> @ugt_4_v2i64(<2 x i64> %0) {
12616; PWR5-LABEL: ugt_4_v2i64:
12617; PWR5:       # %bb.0:
12618; PWR5-NEXT:    lis 5, 21845
12619; PWR5-NEXT:    lis 6, 13107
12620; PWR5-NEXT:    ori 5, 5, 21845
12621; PWR5-NEXT:    rotldi 8, 4, 63
12622; PWR5-NEXT:    rotldi 9, 3, 63
12623; PWR5-NEXT:    rldimi 5, 5, 32, 0
12624; PWR5-NEXT:    and 8, 8, 5
12625; PWR5-NEXT:    and 5, 9, 5
12626; PWR5-NEXT:    ori 6, 6, 13107
12627; PWR5-NEXT:    sub 3, 3, 5
12628; PWR5-NEXT:    rldimi 6, 6, 32, 0
12629; PWR5-NEXT:    sub 4, 4, 8
12630; PWR5-NEXT:    and 8, 3, 6
12631; PWR5-NEXT:    rotldi 3, 3, 62
12632; PWR5-NEXT:    and 3, 3, 6
12633; PWR5-NEXT:    lis 7, 3855
12634; PWR5-NEXT:    and 5, 4, 6
12635; PWR5-NEXT:    rotldi 4, 4, 62
12636; PWR5-NEXT:    add 3, 8, 3
12637; PWR5-NEXT:    lis 9, 257
12638; PWR5-NEXT:    ori 7, 7, 3855
12639; PWR5-NEXT:    and 4, 4, 6
12640; PWR5-NEXT:    rldicl 6, 3, 60, 4
12641; PWR5-NEXT:    ori 9, 9, 257
12642; PWR5-NEXT:    rldimi 7, 7, 32, 0
12643; PWR5-NEXT:    add 4, 5, 4
12644; PWR5-NEXT:    add 3, 3, 6
12645; PWR5-NEXT:    rldimi 9, 9, 32, 0
12646; PWR5-NEXT:    rldicl 5, 4, 60, 4
12647; PWR5-NEXT:    and 3, 3, 7
12648; PWR5-NEXT:    add 4, 4, 5
12649; PWR5-NEXT:    mulld 3, 3, 9
12650; PWR5-NEXT:    and 4, 4, 7
12651; PWR5-NEXT:    rldicl 3, 3, 8, 56
12652; PWR5-NEXT:    mulld 4, 4, 9
12653; PWR5-NEXT:    li 5, 4
12654; PWR5-NEXT:    subfic 3, 3, 4
12655; PWR5-NEXT:    rldicl 4, 4, 8, 56
12656; PWR5-NEXT:    subfe 3, 5, 5
12657; PWR5-NEXT:    subfic 4, 4, 4
12658; PWR5-NEXT:    subfe 4, 5, 5
12659; PWR5-NEXT:    blr
12660;
12661; PWR6-LABEL: ugt_4_v2i64:
12662; PWR6:       # %bb.0:
12663; PWR6-NEXT:    lis 5, 21845
12664; PWR6-NEXT:    lis 6, 13107
12665; PWR6-NEXT:    ori 5, 5, 21845
12666; PWR6-NEXT:    rotldi 8, 4, 63
12667; PWR6-NEXT:    rotldi 9, 3, 63
12668; PWR6-NEXT:    rldimi 5, 5, 32, 0
12669; PWR6-NEXT:    and 8, 8, 5
12670; PWR6-NEXT:    and 5, 9, 5
12671; PWR6-NEXT:    ori 6, 6, 13107
12672; PWR6-NEXT:    sub 3, 3, 5
12673; PWR6-NEXT:    rldimi 6, 6, 32, 0
12674; PWR6-NEXT:    sub 4, 4, 8
12675; PWR6-NEXT:    and 8, 3, 6
12676; PWR6-NEXT:    rotldi 3, 3, 62
12677; PWR6-NEXT:    and 3, 3, 6
12678; PWR6-NEXT:    lis 7, 3855
12679; PWR6-NEXT:    and 5, 4, 6
12680; PWR6-NEXT:    rotldi 4, 4, 62
12681; PWR6-NEXT:    add 3, 8, 3
12682; PWR6-NEXT:    lis 9, 257
12683; PWR6-NEXT:    ori 7, 7, 3855
12684; PWR6-NEXT:    and 4, 4, 6
12685; PWR6-NEXT:    rldicl 6, 3, 60, 4
12686; PWR6-NEXT:    ori 9, 9, 257
12687; PWR6-NEXT:    rldimi 7, 7, 32, 0
12688; PWR6-NEXT:    add 4, 5, 4
12689; PWR6-NEXT:    add 3, 3, 6
12690; PWR6-NEXT:    rldimi 9, 9, 32, 0
12691; PWR6-NEXT:    rldicl 5, 4, 60, 4
12692; PWR6-NEXT:    and 3, 3, 7
12693; PWR6-NEXT:    add 4, 4, 5
12694; PWR6-NEXT:    mulld 3, 3, 9
12695; PWR6-NEXT:    and 4, 4, 7
12696; PWR6-NEXT:    rldicl 3, 3, 8, 56
12697; PWR6-NEXT:    mulld 4, 4, 9
12698; PWR6-NEXT:    li 5, 4
12699; PWR6-NEXT:    subfic 3, 3, 4
12700; PWR6-NEXT:    rldicl 4, 4, 8, 56
12701; PWR6-NEXT:    subfe 3, 5, 5
12702; PWR6-NEXT:    subfic 4, 4, 4
12703; PWR6-NEXT:    subfe 4, 5, 5
12704; PWR6-NEXT:    blr
12705;
12706; PWR7-LABEL: ugt_4_v2i64:
12707; PWR7:       # %bb.0:
12708; PWR7-NEXT:    addi 3, 1, -32
12709; PWR7-NEXT:    li 5, 0
12710; PWR7-NEXT:    li 6, -1
12711; PWR7-NEXT:    stxvd2x 34, 0, 3
12712; PWR7-NEXT:    ld 3, -24(1)
12713; PWR7-NEXT:    ld 4, -32(1)
12714; PWR7-NEXT:    popcntd 3, 3
12715; PWR7-NEXT:    popcntd 4, 4
12716; PWR7-NEXT:    cmpldi 3, 4
12717; PWR7-NEXT:    iselgt 3, 6, 5
12718; PWR7-NEXT:    cmpldi 4, 4
12719; PWR7-NEXT:    iselgt 4, 6, 5
12720; PWR7-NEXT:    std 3, -8(1)
12721; PWR7-NEXT:    addi 3, 1, -16
12722; PWR7-NEXT:    std 4, -16(1)
12723; PWR7-NEXT:    lxvd2x 34, 0, 3
12724; PWR7-NEXT:    blr
12725;
12726; PWR8-LABEL: ugt_4_v2i64:
12727; PWR8:       # %bb.0:
12728; PWR8-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
12729; PWR8-NEXT:    vpopcntd 2, 2
12730; PWR8-NEXT:    addi 3, 3, .LCPI106_0@toc@l
12731; PWR8-NEXT:    lxvd2x 35, 0, 3
12732; PWR8-NEXT:    vcmpgtud 2, 2, 3
12733; PWR8-NEXT:    blr
12734;
12735; PWR9-LABEL: ugt_4_v2i64:
12736; PWR9:       # %bb.0:
12737; PWR9-NEXT:    addis 3, 2, .LCPI106_0@toc@ha
12738; PWR9-NEXT:    vpopcntd 2, 2
12739; PWR9-NEXT:    addi 3, 3, .LCPI106_0@toc@l
12740; PWR9-NEXT:    lxvx 35, 0, 3
12741; PWR9-NEXT:    vcmpgtud 2, 2, 3
12742; PWR9-NEXT:    blr
12743  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12744  %3 = icmp ugt <2 x i64> %2, <i64 4, i64 4>
12745  %4 = sext <2 x i1> %3 to <2 x i64>
12746  ret <2 x i64> %4
12747}
12748
12749define <2 x i64> @ult_5_v2i64(<2 x i64> %0) {
12750; PWR5-LABEL: ult_5_v2i64:
12751; PWR5:       # %bb.0:
12752; PWR5-NEXT:    lis 5, 21845
12753; PWR5-NEXT:    lis 6, 13107
12754; PWR5-NEXT:    ori 5, 5, 21845
12755; PWR5-NEXT:    rotldi 8, 4, 63
12756; PWR5-NEXT:    rotldi 9, 3, 63
12757; PWR5-NEXT:    rldimi 5, 5, 32, 0
12758; PWR5-NEXT:    and 8, 8, 5
12759; PWR5-NEXT:    and 5, 9, 5
12760; PWR5-NEXT:    ori 6, 6, 13107
12761; PWR5-NEXT:    sub 3, 3, 5
12762; PWR5-NEXT:    rldimi 6, 6, 32, 0
12763; PWR5-NEXT:    sub 4, 4, 8
12764; PWR5-NEXT:    and 8, 3, 6
12765; PWR5-NEXT:    rotldi 3, 3, 62
12766; PWR5-NEXT:    and 3, 3, 6
12767; PWR5-NEXT:    lis 7, 3855
12768; PWR5-NEXT:    and 5, 4, 6
12769; PWR5-NEXT:    rotldi 4, 4, 62
12770; PWR5-NEXT:    add 3, 8, 3
12771; PWR5-NEXT:    lis 9, 257
12772; PWR5-NEXT:    ori 7, 7, 3855
12773; PWR5-NEXT:    and 4, 4, 6
12774; PWR5-NEXT:    rldicl 6, 3, 60, 4
12775; PWR5-NEXT:    ori 9, 9, 257
12776; PWR5-NEXT:    rldimi 7, 7, 32, 0
12777; PWR5-NEXT:    add 4, 5, 4
12778; PWR5-NEXT:    add 3, 3, 6
12779; PWR5-NEXT:    rldimi 9, 9, 32, 0
12780; PWR5-NEXT:    rldicl 5, 4, 60, 4
12781; PWR5-NEXT:    and 3, 3, 7
12782; PWR5-NEXT:    add 4, 4, 5
12783; PWR5-NEXT:    mulld 3, 3, 9
12784; PWR5-NEXT:    and 4, 4, 7
12785; PWR5-NEXT:    rldicl 3, 3, 8, 56
12786; PWR5-NEXT:    li 5, 5
12787; PWR5-NEXT:    mulld 4, 4, 9
12788; PWR5-NEXT:    subc 6, 3, 5
12789; PWR5-NEXT:    rldicl 4, 4, 8, 56
12790; PWR5-NEXT:    subfe 3, 3, 3
12791; PWR5-NEXT:    subc 5, 4, 5
12792; PWR5-NEXT:    subfe 4, 4, 4
12793; PWR5-NEXT:    blr
12794;
12795; PWR6-LABEL: ult_5_v2i64:
12796; PWR6:       # %bb.0:
12797; PWR6-NEXT:    lis 5, 21845
12798; PWR6-NEXT:    lis 6, 13107
12799; PWR6-NEXT:    ori 5, 5, 21845
12800; PWR6-NEXT:    rotldi 8, 4, 63
12801; PWR6-NEXT:    rotldi 9, 3, 63
12802; PWR6-NEXT:    rldimi 5, 5, 32, 0
12803; PWR6-NEXT:    and 8, 8, 5
12804; PWR6-NEXT:    and 5, 9, 5
12805; PWR6-NEXT:    ori 6, 6, 13107
12806; PWR6-NEXT:    sub 3, 3, 5
12807; PWR6-NEXT:    rldimi 6, 6, 32, 0
12808; PWR6-NEXT:    sub 4, 4, 8
12809; PWR6-NEXT:    and 8, 3, 6
12810; PWR6-NEXT:    rotldi 3, 3, 62
12811; PWR6-NEXT:    and 3, 3, 6
12812; PWR6-NEXT:    lis 7, 3855
12813; PWR6-NEXT:    and 5, 4, 6
12814; PWR6-NEXT:    rotldi 4, 4, 62
12815; PWR6-NEXT:    add 3, 8, 3
12816; PWR6-NEXT:    lis 9, 257
12817; PWR6-NEXT:    ori 7, 7, 3855
12818; PWR6-NEXT:    and 4, 4, 6
12819; PWR6-NEXT:    rldicl 6, 3, 60, 4
12820; PWR6-NEXT:    ori 9, 9, 257
12821; PWR6-NEXT:    rldimi 7, 7, 32, 0
12822; PWR6-NEXT:    add 4, 5, 4
12823; PWR6-NEXT:    add 3, 3, 6
12824; PWR6-NEXT:    rldimi 9, 9, 32, 0
12825; PWR6-NEXT:    rldicl 5, 4, 60, 4
12826; PWR6-NEXT:    and 3, 3, 7
12827; PWR6-NEXT:    add 4, 4, 5
12828; PWR6-NEXT:    mulld 3, 3, 9
12829; PWR6-NEXT:    and 4, 4, 7
12830; PWR6-NEXT:    rldicl 3, 3, 8, 56
12831; PWR6-NEXT:    li 5, 5
12832; PWR6-NEXT:    mulld 4, 4, 9
12833; PWR6-NEXT:    subc 6, 3, 5
12834; PWR6-NEXT:    rldicl 4, 4, 8, 56
12835; PWR6-NEXT:    subfe 3, 3, 3
12836; PWR6-NEXT:    subc 5, 4, 5
12837; PWR6-NEXT:    subfe 4, 4, 4
12838; PWR6-NEXT:    blr
12839;
12840; PWR7-LABEL: ult_5_v2i64:
12841; PWR7:       # %bb.0:
12842; PWR7-NEXT:    addi 3, 1, -32
12843; PWR7-NEXT:    li 5, 0
12844; PWR7-NEXT:    li 6, -1
12845; PWR7-NEXT:    stxvd2x 34, 0, 3
12846; PWR7-NEXT:    ld 3, -24(1)
12847; PWR7-NEXT:    ld 4, -32(1)
12848; PWR7-NEXT:    popcntd 3, 3
12849; PWR7-NEXT:    popcntd 4, 4
12850; PWR7-NEXT:    cmpldi 3, 5
12851; PWR7-NEXT:    isellt 3, 6, 5
12852; PWR7-NEXT:    cmpldi 4, 5
12853; PWR7-NEXT:    isellt 4, 6, 5
12854; PWR7-NEXT:    std 3, -8(1)
12855; PWR7-NEXT:    addi 3, 1, -16
12856; PWR7-NEXT:    std 4, -16(1)
12857; PWR7-NEXT:    lxvd2x 34, 0, 3
12858; PWR7-NEXT:    blr
12859;
12860; PWR8-LABEL: ult_5_v2i64:
12861; PWR8:       # %bb.0:
12862; PWR8-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
12863; PWR8-NEXT:    vpopcntd 2, 2
12864; PWR8-NEXT:    addi 3, 3, .LCPI107_0@toc@l
12865; PWR8-NEXT:    lxvd2x 35, 0, 3
12866; PWR8-NEXT:    vcmpgtud 2, 3, 2
12867; PWR8-NEXT:    blr
12868;
12869; PWR9-LABEL: ult_5_v2i64:
12870; PWR9:       # %bb.0:
12871; PWR9-NEXT:    addis 3, 2, .LCPI107_0@toc@ha
12872; PWR9-NEXT:    vpopcntd 2, 2
12873; PWR9-NEXT:    addi 3, 3, .LCPI107_0@toc@l
12874; PWR9-NEXT:    lxvx 35, 0, 3
12875; PWR9-NEXT:    vcmpgtud 2, 3, 2
12876; PWR9-NEXT:    blr
12877  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
12878  %3 = icmp ult <2 x i64> %2, <i64 5, i64 5>
12879  %4 = sext <2 x i1> %3 to <2 x i64>
12880  ret <2 x i64> %4
12881}
12882
12883define <2 x i64> @ugt_5_v2i64(<2 x i64> %0) {
12884; PWR5-LABEL: ugt_5_v2i64:
12885; PWR5:       # %bb.0:
12886; PWR5-NEXT:    lis 5, 21845
12887; PWR5-NEXT:    lis 6, 13107
12888; PWR5-NEXT:    ori 5, 5, 21845
12889; PWR5-NEXT:    rotldi 8, 4, 63
12890; PWR5-NEXT:    rotldi 9, 3, 63
12891; PWR5-NEXT:    rldimi 5, 5, 32, 0
12892; PWR5-NEXT:    and 8, 8, 5
12893; PWR5-NEXT:    and 5, 9, 5
12894; PWR5-NEXT:    ori 6, 6, 13107
12895; PWR5-NEXT:    sub 3, 3, 5
12896; PWR5-NEXT:    rldimi 6, 6, 32, 0
12897; PWR5-NEXT:    sub 4, 4, 8
12898; PWR5-NEXT:    and 8, 3, 6
12899; PWR5-NEXT:    rotldi 3, 3, 62
12900; PWR5-NEXT:    and 3, 3, 6
12901; PWR5-NEXT:    lis 7, 3855
12902; PWR5-NEXT:    and 5, 4, 6
12903; PWR5-NEXT:    rotldi 4, 4, 62
12904; PWR5-NEXT:    add 3, 8, 3
12905; PWR5-NEXT:    lis 9, 257
12906; PWR5-NEXT:    ori 7, 7, 3855
12907; PWR5-NEXT:    and 4, 4, 6
12908; PWR5-NEXT:    rldicl 6, 3, 60, 4
12909; PWR5-NEXT:    ori 9, 9, 257
12910; PWR5-NEXT:    rldimi 7, 7, 32, 0
12911; PWR5-NEXT:    add 4, 5, 4
12912; PWR5-NEXT:    add 3, 3, 6
12913; PWR5-NEXT:    rldimi 9, 9, 32, 0
12914; PWR5-NEXT:    rldicl 5, 4, 60, 4
12915; PWR5-NEXT:    and 3, 3, 7
12916; PWR5-NEXT:    add 4, 4, 5
12917; PWR5-NEXT:    mulld 3, 3, 9
12918; PWR5-NEXT:    and 4, 4, 7
12919; PWR5-NEXT:    rldicl 3, 3, 8, 56
12920; PWR5-NEXT:    mulld 4, 4, 9
12921; PWR5-NEXT:    li 5, 5
12922; PWR5-NEXT:    subfic 3, 3, 5
12923; PWR5-NEXT:    rldicl 4, 4, 8, 56
12924; PWR5-NEXT:    subfe 3, 5, 5
12925; PWR5-NEXT:    subfic 4, 4, 5
12926; PWR5-NEXT:    subfe 4, 5, 5
12927; PWR5-NEXT:    blr
12928;
12929; PWR6-LABEL: ugt_5_v2i64:
12930; PWR6:       # %bb.0:
12931; PWR6-NEXT:    lis 5, 21845
12932; PWR6-NEXT:    lis 6, 13107
12933; PWR6-NEXT:    ori 5, 5, 21845
12934; PWR6-NEXT:    rotldi 8, 4, 63
12935; PWR6-NEXT:    rotldi 9, 3, 63
12936; PWR6-NEXT:    rldimi 5, 5, 32, 0
12937; PWR6-NEXT:    and 8, 8, 5
12938; PWR6-NEXT:    and 5, 9, 5
12939; PWR6-NEXT:    ori 6, 6, 13107
12940; PWR6-NEXT:    sub 3, 3, 5
12941; PWR6-NEXT:    rldimi 6, 6, 32, 0
12942; PWR6-NEXT:    sub 4, 4, 8
12943; PWR6-NEXT:    and 8, 3, 6
12944; PWR6-NEXT:    rotldi 3, 3, 62
12945; PWR6-NEXT:    and 3, 3, 6
12946; PWR6-NEXT:    lis 7, 3855
12947; PWR6-NEXT:    and 5, 4, 6
12948; PWR6-NEXT:    rotldi 4, 4, 62
12949; PWR6-NEXT:    add 3, 8, 3
12950; PWR6-NEXT:    lis 9, 257
12951; PWR6-NEXT:    ori 7, 7, 3855
12952; PWR6-NEXT:    and 4, 4, 6
12953; PWR6-NEXT:    rldicl 6, 3, 60, 4
12954; PWR6-NEXT:    ori 9, 9, 257
12955; PWR6-NEXT:    rldimi 7, 7, 32, 0
12956; PWR6-NEXT:    add 4, 5, 4
12957; PWR6-NEXT:    add 3, 3, 6
12958; PWR6-NEXT:    rldimi 9, 9, 32, 0
12959; PWR6-NEXT:    rldicl 5, 4, 60, 4
12960; PWR6-NEXT:    and 3, 3, 7
12961; PWR6-NEXT:    add 4, 4, 5
12962; PWR6-NEXT:    mulld 3, 3, 9
12963; PWR6-NEXT:    and 4, 4, 7
12964; PWR6-NEXT:    rldicl 3, 3, 8, 56
12965; PWR6-NEXT:    mulld 4, 4, 9
12966; PWR6-NEXT:    li 5, 5
12967; PWR6-NEXT:    subfic 3, 3, 5
12968; PWR6-NEXT:    rldicl 4, 4, 8, 56
12969; PWR6-NEXT:    subfe 3, 5, 5
12970; PWR6-NEXT:    subfic 4, 4, 5
12971; PWR6-NEXT:    subfe 4, 5, 5
12972; PWR6-NEXT:    blr
12973;
12974; PWR7-LABEL: ugt_5_v2i64:
12975; PWR7:       # %bb.0:
12976; PWR7-NEXT:    addi 3, 1, -32
12977; PWR7-NEXT:    li 5, 0
12978; PWR7-NEXT:    li 6, -1
12979; PWR7-NEXT:    stxvd2x 34, 0, 3
12980; PWR7-NEXT:    ld 3, -24(1)
12981; PWR7-NEXT:    ld 4, -32(1)
12982; PWR7-NEXT:    popcntd 3, 3
12983; PWR7-NEXT:    popcntd 4, 4
12984; PWR7-NEXT:    cmpldi 3, 5
12985; PWR7-NEXT:    iselgt 3, 6, 5
12986; PWR7-NEXT:    cmpldi 4, 5
12987; PWR7-NEXT:    iselgt 4, 6, 5
12988; PWR7-NEXT:    std 3, -8(1)
12989; PWR7-NEXT:    addi 3, 1, -16
12990; PWR7-NEXT:    std 4, -16(1)
12991; PWR7-NEXT:    lxvd2x 34, 0, 3
12992; PWR7-NEXT:    blr
12993;
12994; PWR8-LABEL: ugt_5_v2i64:
12995; PWR8:       # %bb.0:
12996; PWR8-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
12997; PWR8-NEXT:    vpopcntd 2, 2
12998; PWR8-NEXT:    addi 3, 3, .LCPI108_0@toc@l
12999; PWR8-NEXT:    lxvd2x 35, 0, 3
13000; PWR8-NEXT:    vcmpgtud 2, 2, 3
13001; PWR8-NEXT:    blr
13002;
13003; PWR9-LABEL: ugt_5_v2i64:
13004; PWR9:       # %bb.0:
13005; PWR9-NEXT:    addis 3, 2, .LCPI108_0@toc@ha
13006; PWR9-NEXT:    vpopcntd 2, 2
13007; PWR9-NEXT:    addi 3, 3, .LCPI108_0@toc@l
13008; PWR9-NEXT:    lxvx 35, 0, 3
13009; PWR9-NEXT:    vcmpgtud 2, 2, 3
13010; PWR9-NEXT:    blr
13011  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13012  %3 = icmp ugt <2 x i64> %2, <i64 5, i64 5>
13013  %4 = sext <2 x i1> %3 to <2 x i64>
13014  ret <2 x i64> %4
13015}
13016
13017define <2 x i64> @ult_6_v2i64(<2 x i64> %0) {
13018; PWR5-LABEL: ult_6_v2i64:
13019; PWR5:       # %bb.0:
13020; PWR5-NEXT:    lis 5, 21845
13021; PWR5-NEXT:    lis 6, 13107
13022; PWR5-NEXT:    ori 5, 5, 21845
13023; PWR5-NEXT:    rotldi 8, 4, 63
13024; PWR5-NEXT:    rotldi 9, 3, 63
13025; PWR5-NEXT:    rldimi 5, 5, 32, 0
13026; PWR5-NEXT:    and 8, 8, 5
13027; PWR5-NEXT:    and 5, 9, 5
13028; PWR5-NEXT:    ori 6, 6, 13107
13029; PWR5-NEXT:    sub 3, 3, 5
13030; PWR5-NEXT:    rldimi 6, 6, 32, 0
13031; PWR5-NEXT:    sub 4, 4, 8
13032; PWR5-NEXT:    and 8, 3, 6
13033; PWR5-NEXT:    rotldi 3, 3, 62
13034; PWR5-NEXT:    and 3, 3, 6
13035; PWR5-NEXT:    lis 7, 3855
13036; PWR5-NEXT:    and 5, 4, 6
13037; PWR5-NEXT:    rotldi 4, 4, 62
13038; PWR5-NEXT:    add 3, 8, 3
13039; PWR5-NEXT:    lis 9, 257
13040; PWR5-NEXT:    ori 7, 7, 3855
13041; PWR5-NEXT:    and 4, 4, 6
13042; PWR5-NEXT:    rldicl 6, 3, 60, 4
13043; PWR5-NEXT:    ori 9, 9, 257
13044; PWR5-NEXT:    rldimi 7, 7, 32, 0
13045; PWR5-NEXT:    add 4, 5, 4
13046; PWR5-NEXT:    add 3, 3, 6
13047; PWR5-NEXT:    rldimi 9, 9, 32, 0
13048; PWR5-NEXT:    rldicl 5, 4, 60, 4
13049; PWR5-NEXT:    and 3, 3, 7
13050; PWR5-NEXT:    add 4, 4, 5
13051; PWR5-NEXT:    mulld 3, 3, 9
13052; PWR5-NEXT:    and 4, 4, 7
13053; PWR5-NEXT:    rldicl 3, 3, 8, 56
13054; PWR5-NEXT:    li 5, 6
13055; PWR5-NEXT:    mulld 4, 4, 9
13056; PWR5-NEXT:    subc 6, 3, 5
13057; PWR5-NEXT:    rldicl 4, 4, 8, 56
13058; PWR5-NEXT:    subfe 3, 3, 3
13059; PWR5-NEXT:    subc 5, 4, 5
13060; PWR5-NEXT:    subfe 4, 4, 4
13061; PWR5-NEXT:    blr
13062;
13063; PWR6-LABEL: ult_6_v2i64:
13064; PWR6:       # %bb.0:
13065; PWR6-NEXT:    lis 5, 21845
13066; PWR6-NEXT:    lis 6, 13107
13067; PWR6-NEXT:    ori 5, 5, 21845
13068; PWR6-NEXT:    rotldi 8, 4, 63
13069; PWR6-NEXT:    rotldi 9, 3, 63
13070; PWR6-NEXT:    rldimi 5, 5, 32, 0
13071; PWR6-NEXT:    and 8, 8, 5
13072; PWR6-NEXT:    and 5, 9, 5
13073; PWR6-NEXT:    ori 6, 6, 13107
13074; PWR6-NEXT:    sub 3, 3, 5
13075; PWR6-NEXT:    rldimi 6, 6, 32, 0
13076; PWR6-NEXT:    sub 4, 4, 8
13077; PWR6-NEXT:    and 8, 3, 6
13078; PWR6-NEXT:    rotldi 3, 3, 62
13079; PWR6-NEXT:    and 3, 3, 6
13080; PWR6-NEXT:    lis 7, 3855
13081; PWR6-NEXT:    and 5, 4, 6
13082; PWR6-NEXT:    rotldi 4, 4, 62
13083; PWR6-NEXT:    add 3, 8, 3
13084; PWR6-NEXT:    lis 9, 257
13085; PWR6-NEXT:    ori 7, 7, 3855
13086; PWR6-NEXT:    and 4, 4, 6
13087; PWR6-NEXT:    rldicl 6, 3, 60, 4
13088; PWR6-NEXT:    ori 9, 9, 257
13089; PWR6-NEXT:    rldimi 7, 7, 32, 0
13090; PWR6-NEXT:    add 4, 5, 4
13091; PWR6-NEXT:    add 3, 3, 6
13092; PWR6-NEXT:    rldimi 9, 9, 32, 0
13093; PWR6-NEXT:    rldicl 5, 4, 60, 4
13094; PWR6-NEXT:    and 3, 3, 7
13095; PWR6-NEXT:    add 4, 4, 5
13096; PWR6-NEXT:    mulld 3, 3, 9
13097; PWR6-NEXT:    and 4, 4, 7
13098; PWR6-NEXT:    rldicl 3, 3, 8, 56
13099; PWR6-NEXT:    li 5, 6
13100; PWR6-NEXT:    mulld 4, 4, 9
13101; PWR6-NEXT:    subc 6, 3, 5
13102; PWR6-NEXT:    rldicl 4, 4, 8, 56
13103; PWR6-NEXT:    subfe 3, 3, 3
13104; PWR6-NEXT:    subc 5, 4, 5
13105; PWR6-NEXT:    subfe 4, 4, 4
13106; PWR6-NEXT:    blr
13107;
13108; PWR7-LABEL: ult_6_v2i64:
13109; PWR7:       # %bb.0:
13110; PWR7-NEXT:    addi 3, 1, -32
13111; PWR7-NEXT:    li 5, 0
13112; PWR7-NEXT:    li 6, -1
13113; PWR7-NEXT:    stxvd2x 34, 0, 3
13114; PWR7-NEXT:    ld 3, -24(1)
13115; PWR7-NEXT:    ld 4, -32(1)
13116; PWR7-NEXT:    popcntd 3, 3
13117; PWR7-NEXT:    popcntd 4, 4
13118; PWR7-NEXT:    cmpldi 3, 6
13119; PWR7-NEXT:    isellt 3, 6, 5
13120; PWR7-NEXT:    cmpldi 4, 6
13121; PWR7-NEXT:    isellt 4, 6, 5
13122; PWR7-NEXT:    std 3, -8(1)
13123; PWR7-NEXT:    addi 3, 1, -16
13124; PWR7-NEXT:    std 4, -16(1)
13125; PWR7-NEXT:    lxvd2x 34, 0, 3
13126; PWR7-NEXT:    blr
13127;
13128; PWR8-LABEL: ult_6_v2i64:
13129; PWR8:       # %bb.0:
13130; PWR8-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
13131; PWR8-NEXT:    vpopcntd 2, 2
13132; PWR8-NEXT:    addi 3, 3, .LCPI109_0@toc@l
13133; PWR8-NEXT:    lxvd2x 35, 0, 3
13134; PWR8-NEXT:    vcmpgtud 2, 3, 2
13135; PWR8-NEXT:    blr
13136;
13137; PWR9-LABEL: ult_6_v2i64:
13138; PWR9:       # %bb.0:
13139; PWR9-NEXT:    addis 3, 2, .LCPI109_0@toc@ha
13140; PWR9-NEXT:    vpopcntd 2, 2
13141; PWR9-NEXT:    addi 3, 3, .LCPI109_0@toc@l
13142; PWR9-NEXT:    lxvx 35, 0, 3
13143; PWR9-NEXT:    vcmpgtud 2, 3, 2
13144; PWR9-NEXT:    blr
13145  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13146  %3 = icmp ult <2 x i64> %2, <i64 6, i64 6>
13147  %4 = sext <2 x i1> %3 to <2 x i64>
13148  ret <2 x i64> %4
13149}
13150
13151define <2 x i64> @ugt_6_v2i64(<2 x i64> %0) {
13152; PWR5-LABEL: ugt_6_v2i64:
13153; PWR5:       # %bb.0:
13154; PWR5-NEXT:    lis 5, 21845
13155; PWR5-NEXT:    lis 6, 13107
13156; PWR5-NEXT:    ori 5, 5, 21845
13157; PWR5-NEXT:    rotldi 8, 4, 63
13158; PWR5-NEXT:    rotldi 9, 3, 63
13159; PWR5-NEXT:    rldimi 5, 5, 32, 0
13160; PWR5-NEXT:    and 8, 8, 5
13161; PWR5-NEXT:    and 5, 9, 5
13162; PWR5-NEXT:    ori 6, 6, 13107
13163; PWR5-NEXT:    sub 3, 3, 5
13164; PWR5-NEXT:    rldimi 6, 6, 32, 0
13165; PWR5-NEXT:    sub 4, 4, 8
13166; PWR5-NEXT:    and 8, 3, 6
13167; PWR5-NEXT:    rotldi 3, 3, 62
13168; PWR5-NEXT:    and 3, 3, 6
13169; PWR5-NEXT:    lis 7, 3855
13170; PWR5-NEXT:    and 5, 4, 6
13171; PWR5-NEXT:    rotldi 4, 4, 62
13172; PWR5-NEXT:    add 3, 8, 3
13173; PWR5-NEXT:    lis 9, 257
13174; PWR5-NEXT:    ori 7, 7, 3855
13175; PWR5-NEXT:    and 4, 4, 6
13176; PWR5-NEXT:    rldicl 6, 3, 60, 4
13177; PWR5-NEXT:    ori 9, 9, 257
13178; PWR5-NEXT:    rldimi 7, 7, 32, 0
13179; PWR5-NEXT:    add 4, 5, 4
13180; PWR5-NEXT:    add 3, 3, 6
13181; PWR5-NEXT:    rldimi 9, 9, 32, 0
13182; PWR5-NEXT:    rldicl 5, 4, 60, 4
13183; PWR5-NEXT:    and 3, 3, 7
13184; PWR5-NEXT:    add 4, 4, 5
13185; PWR5-NEXT:    mulld 3, 3, 9
13186; PWR5-NEXT:    and 4, 4, 7
13187; PWR5-NEXT:    rldicl 3, 3, 8, 56
13188; PWR5-NEXT:    mulld 4, 4, 9
13189; PWR5-NEXT:    li 5, 6
13190; PWR5-NEXT:    subfic 3, 3, 6
13191; PWR5-NEXT:    rldicl 4, 4, 8, 56
13192; PWR5-NEXT:    subfe 3, 5, 5
13193; PWR5-NEXT:    subfic 4, 4, 6
13194; PWR5-NEXT:    subfe 4, 5, 5
13195; PWR5-NEXT:    blr
13196;
13197; PWR6-LABEL: ugt_6_v2i64:
13198; PWR6:       # %bb.0:
13199; PWR6-NEXT:    lis 5, 21845
13200; PWR6-NEXT:    lis 6, 13107
13201; PWR6-NEXT:    ori 5, 5, 21845
13202; PWR6-NEXT:    rotldi 8, 4, 63
13203; PWR6-NEXT:    rotldi 9, 3, 63
13204; PWR6-NEXT:    rldimi 5, 5, 32, 0
13205; PWR6-NEXT:    and 8, 8, 5
13206; PWR6-NEXT:    and 5, 9, 5
13207; PWR6-NEXT:    ori 6, 6, 13107
13208; PWR6-NEXT:    sub 3, 3, 5
13209; PWR6-NEXT:    rldimi 6, 6, 32, 0
13210; PWR6-NEXT:    sub 4, 4, 8
13211; PWR6-NEXT:    and 8, 3, 6
13212; PWR6-NEXT:    rotldi 3, 3, 62
13213; PWR6-NEXT:    and 3, 3, 6
13214; PWR6-NEXT:    lis 7, 3855
13215; PWR6-NEXT:    and 5, 4, 6
13216; PWR6-NEXT:    rotldi 4, 4, 62
13217; PWR6-NEXT:    add 3, 8, 3
13218; PWR6-NEXT:    lis 9, 257
13219; PWR6-NEXT:    ori 7, 7, 3855
13220; PWR6-NEXT:    and 4, 4, 6
13221; PWR6-NEXT:    rldicl 6, 3, 60, 4
13222; PWR6-NEXT:    ori 9, 9, 257
13223; PWR6-NEXT:    rldimi 7, 7, 32, 0
13224; PWR6-NEXT:    add 4, 5, 4
13225; PWR6-NEXT:    add 3, 3, 6
13226; PWR6-NEXT:    rldimi 9, 9, 32, 0
13227; PWR6-NEXT:    rldicl 5, 4, 60, 4
13228; PWR6-NEXT:    and 3, 3, 7
13229; PWR6-NEXT:    add 4, 4, 5
13230; PWR6-NEXT:    mulld 3, 3, 9
13231; PWR6-NEXT:    and 4, 4, 7
13232; PWR6-NEXT:    rldicl 3, 3, 8, 56
13233; PWR6-NEXT:    mulld 4, 4, 9
13234; PWR6-NEXT:    li 5, 6
13235; PWR6-NEXT:    subfic 3, 3, 6
13236; PWR6-NEXT:    rldicl 4, 4, 8, 56
13237; PWR6-NEXT:    subfe 3, 5, 5
13238; PWR6-NEXT:    subfic 4, 4, 6
13239; PWR6-NEXT:    subfe 4, 5, 5
13240; PWR6-NEXT:    blr
13241;
13242; PWR7-LABEL: ugt_6_v2i64:
13243; PWR7:       # %bb.0:
13244; PWR7-NEXT:    addi 3, 1, -32
13245; PWR7-NEXT:    li 5, 0
13246; PWR7-NEXT:    li 6, -1
13247; PWR7-NEXT:    stxvd2x 34, 0, 3
13248; PWR7-NEXT:    ld 3, -24(1)
13249; PWR7-NEXT:    ld 4, -32(1)
13250; PWR7-NEXT:    popcntd 3, 3
13251; PWR7-NEXT:    popcntd 4, 4
13252; PWR7-NEXT:    cmpldi 3, 6
13253; PWR7-NEXT:    iselgt 3, 6, 5
13254; PWR7-NEXT:    cmpldi 4, 6
13255; PWR7-NEXT:    iselgt 4, 6, 5
13256; PWR7-NEXT:    std 3, -8(1)
13257; PWR7-NEXT:    addi 3, 1, -16
13258; PWR7-NEXT:    std 4, -16(1)
13259; PWR7-NEXT:    lxvd2x 34, 0, 3
13260; PWR7-NEXT:    blr
13261;
13262; PWR8-LABEL: ugt_6_v2i64:
13263; PWR8:       # %bb.0:
13264; PWR8-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
13265; PWR8-NEXT:    vpopcntd 2, 2
13266; PWR8-NEXT:    addi 3, 3, .LCPI110_0@toc@l
13267; PWR8-NEXT:    lxvd2x 35, 0, 3
13268; PWR8-NEXT:    vcmpgtud 2, 2, 3
13269; PWR8-NEXT:    blr
13270;
13271; PWR9-LABEL: ugt_6_v2i64:
13272; PWR9:       # %bb.0:
13273; PWR9-NEXT:    addis 3, 2, .LCPI110_0@toc@ha
13274; PWR9-NEXT:    vpopcntd 2, 2
13275; PWR9-NEXT:    addi 3, 3, .LCPI110_0@toc@l
13276; PWR9-NEXT:    lxvx 35, 0, 3
13277; PWR9-NEXT:    vcmpgtud 2, 2, 3
13278; PWR9-NEXT:    blr
13279  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13280  %3 = icmp ugt <2 x i64> %2, <i64 6, i64 6>
13281  %4 = sext <2 x i1> %3 to <2 x i64>
13282  ret <2 x i64> %4
13283}
13284
13285define <2 x i64> @ult_7_v2i64(<2 x i64> %0) {
13286; PWR5-LABEL: ult_7_v2i64:
13287; PWR5:       # %bb.0:
13288; PWR5-NEXT:    lis 5, 21845
13289; PWR5-NEXT:    lis 6, 13107
13290; PWR5-NEXT:    ori 5, 5, 21845
13291; PWR5-NEXT:    rotldi 8, 4, 63
13292; PWR5-NEXT:    rotldi 9, 3, 63
13293; PWR5-NEXT:    rldimi 5, 5, 32, 0
13294; PWR5-NEXT:    and 8, 8, 5
13295; PWR5-NEXT:    and 5, 9, 5
13296; PWR5-NEXT:    ori 6, 6, 13107
13297; PWR5-NEXT:    sub 3, 3, 5
13298; PWR5-NEXT:    rldimi 6, 6, 32, 0
13299; PWR5-NEXT:    sub 4, 4, 8
13300; PWR5-NEXT:    and 8, 3, 6
13301; PWR5-NEXT:    rotldi 3, 3, 62
13302; PWR5-NEXT:    and 3, 3, 6
13303; PWR5-NEXT:    lis 7, 3855
13304; PWR5-NEXT:    and 5, 4, 6
13305; PWR5-NEXT:    rotldi 4, 4, 62
13306; PWR5-NEXT:    add 3, 8, 3
13307; PWR5-NEXT:    lis 9, 257
13308; PWR5-NEXT:    ori 7, 7, 3855
13309; PWR5-NEXT:    and 4, 4, 6
13310; PWR5-NEXT:    rldicl 6, 3, 60, 4
13311; PWR5-NEXT:    ori 9, 9, 257
13312; PWR5-NEXT:    rldimi 7, 7, 32, 0
13313; PWR5-NEXT:    add 4, 5, 4
13314; PWR5-NEXT:    add 3, 3, 6
13315; PWR5-NEXT:    rldimi 9, 9, 32, 0
13316; PWR5-NEXT:    rldicl 5, 4, 60, 4
13317; PWR5-NEXT:    and 3, 3, 7
13318; PWR5-NEXT:    add 4, 4, 5
13319; PWR5-NEXT:    mulld 3, 3, 9
13320; PWR5-NEXT:    and 4, 4, 7
13321; PWR5-NEXT:    rldicl 3, 3, 8, 56
13322; PWR5-NEXT:    li 5, 7
13323; PWR5-NEXT:    mulld 4, 4, 9
13324; PWR5-NEXT:    subc 6, 3, 5
13325; PWR5-NEXT:    rldicl 4, 4, 8, 56
13326; PWR5-NEXT:    subfe 3, 3, 3
13327; PWR5-NEXT:    subc 5, 4, 5
13328; PWR5-NEXT:    subfe 4, 4, 4
13329; PWR5-NEXT:    blr
13330;
13331; PWR6-LABEL: ult_7_v2i64:
13332; PWR6:       # %bb.0:
13333; PWR6-NEXT:    lis 5, 21845
13334; PWR6-NEXT:    lis 6, 13107
13335; PWR6-NEXT:    ori 5, 5, 21845
13336; PWR6-NEXT:    rotldi 8, 4, 63
13337; PWR6-NEXT:    rotldi 9, 3, 63
13338; PWR6-NEXT:    rldimi 5, 5, 32, 0
13339; PWR6-NEXT:    and 8, 8, 5
13340; PWR6-NEXT:    and 5, 9, 5
13341; PWR6-NEXT:    ori 6, 6, 13107
13342; PWR6-NEXT:    sub 3, 3, 5
13343; PWR6-NEXT:    rldimi 6, 6, 32, 0
13344; PWR6-NEXT:    sub 4, 4, 8
13345; PWR6-NEXT:    and 8, 3, 6
13346; PWR6-NEXT:    rotldi 3, 3, 62
13347; PWR6-NEXT:    and 3, 3, 6
13348; PWR6-NEXT:    lis 7, 3855
13349; PWR6-NEXT:    and 5, 4, 6
13350; PWR6-NEXT:    rotldi 4, 4, 62
13351; PWR6-NEXT:    add 3, 8, 3
13352; PWR6-NEXT:    lis 9, 257
13353; PWR6-NEXT:    ori 7, 7, 3855
13354; PWR6-NEXT:    and 4, 4, 6
13355; PWR6-NEXT:    rldicl 6, 3, 60, 4
13356; PWR6-NEXT:    ori 9, 9, 257
13357; PWR6-NEXT:    rldimi 7, 7, 32, 0
13358; PWR6-NEXT:    add 4, 5, 4
13359; PWR6-NEXT:    add 3, 3, 6
13360; PWR6-NEXT:    rldimi 9, 9, 32, 0
13361; PWR6-NEXT:    rldicl 5, 4, 60, 4
13362; PWR6-NEXT:    and 3, 3, 7
13363; PWR6-NEXT:    add 4, 4, 5
13364; PWR6-NEXT:    mulld 3, 3, 9
13365; PWR6-NEXT:    and 4, 4, 7
13366; PWR6-NEXT:    rldicl 3, 3, 8, 56
13367; PWR6-NEXT:    li 5, 7
13368; PWR6-NEXT:    mulld 4, 4, 9
13369; PWR6-NEXT:    subc 6, 3, 5
13370; PWR6-NEXT:    rldicl 4, 4, 8, 56
13371; PWR6-NEXT:    subfe 3, 3, 3
13372; PWR6-NEXT:    subc 5, 4, 5
13373; PWR6-NEXT:    subfe 4, 4, 4
13374; PWR6-NEXT:    blr
13375;
13376; PWR7-LABEL: ult_7_v2i64:
13377; PWR7:       # %bb.0:
13378; PWR7-NEXT:    addi 3, 1, -32
13379; PWR7-NEXT:    li 5, 0
13380; PWR7-NEXT:    li 6, -1
13381; PWR7-NEXT:    stxvd2x 34, 0, 3
13382; PWR7-NEXT:    ld 3, -24(1)
13383; PWR7-NEXT:    ld 4, -32(1)
13384; PWR7-NEXT:    popcntd 3, 3
13385; PWR7-NEXT:    popcntd 4, 4
13386; PWR7-NEXT:    cmpldi 3, 7
13387; PWR7-NEXT:    isellt 3, 6, 5
13388; PWR7-NEXT:    cmpldi 4, 7
13389; PWR7-NEXT:    isellt 4, 6, 5
13390; PWR7-NEXT:    std 3, -8(1)
13391; PWR7-NEXT:    addi 3, 1, -16
13392; PWR7-NEXT:    std 4, -16(1)
13393; PWR7-NEXT:    lxvd2x 34, 0, 3
13394; PWR7-NEXT:    blr
13395;
13396; PWR8-LABEL: ult_7_v2i64:
13397; PWR8:       # %bb.0:
13398; PWR8-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
13399; PWR8-NEXT:    vpopcntd 2, 2
13400; PWR8-NEXT:    addi 3, 3, .LCPI111_0@toc@l
13401; PWR8-NEXT:    lxvd2x 35, 0, 3
13402; PWR8-NEXT:    vcmpgtud 2, 3, 2
13403; PWR8-NEXT:    blr
13404;
13405; PWR9-LABEL: ult_7_v2i64:
13406; PWR9:       # %bb.0:
13407; PWR9-NEXT:    addis 3, 2, .LCPI111_0@toc@ha
13408; PWR9-NEXT:    vpopcntd 2, 2
13409; PWR9-NEXT:    addi 3, 3, .LCPI111_0@toc@l
13410; PWR9-NEXT:    lxvx 35, 0, 3
13411; PWR9-NEXT:    vcmpgtud 2, 3, 2
13412; PWR9-NEXT:    blr
13413  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13414  %3 = icmp ult <2 x i64> %2, <i64 7, i64 7>
13415  %4 = sext <2 x i1> %3 to <2 x i64>
13416  ret <2 x i64> %4
13417}
13418
13419define <2 x i64> @ugt_7_v2i64(<2 x i64> %0) {
13420; PWR5-LABEL: ugt_7_v2i64:
13421; PWR5:       # %bb.0:
13422; PWR5-NEXT:    lis 5, 21845
13423; PWR5-NEXT:    lis 6, 13107
13424; PWR5-NEXT:    ori 5, 5, 21845
13425; PWR5-NEXT:    rotldi 8, 4, 63
13426; PWR5-NEXT:    rotldi 9, 3, 63
13427; PWR5-NEXT:    rldimi 5, 5, 32, 0
13428; PWR5-NEXT:    and 8, 8, 5
13429; PWR5-NEXT:    and 5, 9, 5
13430; PWR5-NEXT:    ori 6, 6, 13107
13431; PWR5-NEXT:    sub 3, 3, 5
13432; PWR5-NEXT:    rldimi 6, 6, 32, 0
13433; PWR5-NEXT:    sub 4, 4, 8
13434; PWR5-NEXT:    and 8, 3, 6
13435; PWR5-NEXT:    rotldi 3, 3, 62
13436; PWR5-NEXT:    and 3, 3, 6
13437; PWR5-NEXT:    lis 7, 3855
13438; PWR5-NEXT:    and 5, 4, 6
13439; PWR5-NEXT:    rotldi 4, 4, 62
13440; PWR5-NEXT:    add 3, 8, 3
13441; PWR5-NEXT:    lis 9, 257
13442; PWR5-NEXT:    ori 7, 7, 3855
13443; PWR5-NEXT:    and 4, 4, 6
13444; PWR5-NEXT:    rldicl 6, 3, 60, 4
13445; PWR5-NEXT:    ori 9, 9, 257
13446; PWR5-NEXT:    rldimi 7, 7, 32, 0
13447; PWR5-NEXT:    add 4, 5, 4
13448; PWR5-NEXT:    add 3, 3, 6
13449; PWR5-NEXT:    rldimi 9, 9, 32, 0
13450; PWR5-NEXT:    rldicl 5, 4, 60, 4
13451; PWR5-NEXT:    and 3, 3, 7
13452; PWR5-NEXT:    add 4, 4, 5
13453; PWR5-NEXT:    mulld 3, 3, 9
13454; PWR5-NEXT:    and 4, 4, 7
13455; PWR5-NEXT:    rldicl 3, 3, 8, 56
13456; PWR5-NEXT:    mulld 4, 4, 9
13457; PWR5-NEXT:    li 5, 7
13458; PWR5-NEXT:    subfic 3, 3, 7
13459; PWR5-NEXT:    rldicl 4, 4, 8, 56
13460; PWR5-NEXT:    subfe 3, 5, 5
13461; PWR5-NEXT:    subfic 4, 4, 7
13462; PWR5-NEXT:    subfe 4, 5, 5
13463; PWR5-NEXT:    blr
13464;
13465; PWR6-LABEL: ugt_7_v2i64:
13466; PWR6:       # %bb.0:
13467; PWR6-NEXT:    lis 5, 21845
13468; PWR6-NEXT:    lis 6, 13107
13469; PWR6-NEXT:    ori 5, 5, 21845
13470; PWR6-NEXT:    rotldi 8, 4, 63
13471; PWR6-NEXT:    rotldi 9, 3, 63
13472; PWR6-NEXT:    rldimi 5, 5, 32, 0
13473; PWR6-NEXT:    and 8, 8, 5
13474; PWR6-NEXT:    and 5, 9, 5
13475; PWR6-NEXT:    ori 6, 6, 13107
13476; PWR6-NEXT:    sub 3, 3, 5
13477; PWR6-NEXT:    rldimi 6, 6, 32, 0
13478; PWR6-NEXT:    sub 4, 4, 8
13479; PWR6-NEXT:    and 8, 3, 6
13480; PWR6-NEXT:    rotldi 3, 3, 62
13481; PWR6-NEXT:    and 3, 3, 6
13482; PWR6-NEXT:    lis 7, 3855
13483; PWR6-NEXT:    and 5, 4, 6
13484; PWR6-NEXT:    rotldi 4, 4, 62
13485; PWR6-NEXT:    add 3, 8, 3
13486; PWR6-NEXT:    lis 9, 257
13487; PWR6-NEXT:    ori 7, 7, 3855
13488; PWR6-NEXT:    and 4, 4, 6
13489; PWR6-NEXT:    rldicl 6, 3, 60, 4
13490; PWR6-NEXT:    ori 9, 9, 257
13491; PWR6-NEXT:    rldimi 7, 7, 32, 0
13492; PWR6-NEXT:    add 4, 5, 4
13493; PWR6-NEXT:    add 3, 3, 6
13494; PWR6-NEXT:    rldimi 9, 9, 32, 0
13495; PWR6-NEXT:    rldicl 5, 4, 60, 4
13496; PWR6-NEXT:    and 3, 3, 7
13497; PWR6-NEXT:    add 4, 4, 5
13498; PWR6-NEXT:    mulld 3, 3, 9
13499; PWR6-NEXT:    and 4, 4, 7
13500; PWR6-NEXT:    rldicl 3, 3, 8, 56
13501; PWR6-NEXT:    mulld 4, 4, 9
13502; PWR6-NEXT:    li 5, 7
13503; PWR6-NEXT:    subfic 3, 3, 7
13504; PWR6-NEXT:    rldicl 4, 4, 8, 56
13505; PWR6-NEXT:    subfe 3, 5, 5
13506; PWR6-NEXT:    subfic 4, 4, 7
13507; PWR6-NEXT:    subfe 4, 5, 5
13508; PWR6-NEXT:    blr
13509;
13510; PWR7-LABEL: ugt_7_v2i64:
13511; PWR7:       # %bb.0:
13512; PWR7-NEXT:    addi 3, 1, -32
13513; PWR7-NEXT:    li 5, 0
13514; PWR7-NEXT:    li 6, -1
13515; PWR7-NEXT:    stxvd2x 34, 0, 3
13516; PWR7-NEXT:    ld 3, -24(1)
13517; PWR7-NEXT:    ld 4, -32(1)
13518; PWR7-NEXT:    popcntd 3, 3
13519; PWR7-NEXT:    popcntd 4, 4
13520; PWR7-NEXT:    cmpldi 3, 7
13521; PWR7-NEXT:    iselgt 3, 6, 5
13522; PWR7-NEXT:    cmpldi 4, 7
13523; PWR7-NEXT:    iselgt 4, 6, 5
13524; PWR7-NEXT:    std 3, -8(1)
13525; PWR7-NEXT:    addi 3, 1, -16
13526; PWR7-NEXT:    std 4, -16(1)
13527; PWR7-NEXT:    lxvd2x 34, 0, 3
13528; PWR7-NEXT:    blr
13529;
13530; PWR8-LABEL: ugt_7_v2i64:
13531; PWR8:       # %bb.0:
13532; PWR8-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
13533; PWR8-NEXT:    vpopcntd 2, 2
13534; PWR8-NEXT:    addi 3, 3, .LCPI112_0@toc@l
13535; PWR8-NEXT:    lxvd2x 35, 0, 3
13536; PWR8-NEXT:    vcmpgtud 2, 2, 3
13537; PWR8-NEXT:    blr
13538;
13539; PWR9-LABEL: ugt_7_v2i64:
13540; PWR9:       # %bb.0:
13541; PWR9-NEXT:    addis 3, 2, .LCPI112_0@toc@ha
13542; PWR9-NEXT:    vpopcntd 2, 2
13543; PWR9-NEXT:    addi 3, 3, .LCPI112_0@toc@l
13544; PWR9-NEXT:    lxvx 35, 0, 3
13545; PWR9-NEXT:    vcmpgtud 2, 2, 3
13546; PWR9-NEXT:    blr
13547  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13548  %3 = icmp ugt <2 x i64> %2, <i64 7, i64 7>
13549  %4 = sext <2 x i1> %3 to <2 x i64>
13550  ret <2 x i64> %4
13551}
13552
13553define <2 x i64> @ult_8_v2i64(<2 x i64> %0) {
13554; PWR5-LABEL: ult_8_v2i64:
13555; PWR5:       # %bb.0:
13556; PWR5-NEXT:    lis 5, 21845
13557; PWR5-NEXT:    lis 6, 13107
13558; PWR5-NEXT:    ori 5, 5, 21845
13559; PWR5-NEXT:    rotldi 8, 4, 63
13560; PWR5-NEXT:    rotldi 9, 3, 63
13561; PWR5-NEXT:    rldimi 5, 5, 32, 0
13562; PWR5-NEXT:    and 8, 8, 5
13563; PWR5-NEXT:    and 5, 9, 5
13564; PWR5-NEXT:    ori 6, 6, 13107
13565; PWR5-NEXT:    sub 3, 3, 5
13566; PWR5-NEXT:    rldimi 6, 6, 32, 0
13567; PWR5-NEXT:    sub 4, 4, 8
13568; PWR5-NEXT:    and 8, 3, 6
13569; PWR5-NEXT:    rotldi 3, 3, 62
13570; PWR5-NEXT:    and 3, 3, 6
13571; PWR5-NEXT:    lis 7, 3855
13572; PWR5-NEXT:    and 5, 4, 6
13573; PWR5-NEXT:    rotldi 4, 4, 62
13574; PWR5-NEXT:    add 3, 8, 3
13575; PWR5-NEXT:    lis 9, 257
13576; PWR5-NEXT:    ori 7, 7, 3855
13577; PWR5-NEXT:    and 4, 4, 6
13578; PWR5-NEXT:    rldicl 6, 3, 60, 4
13579; PWR5-NEXT:    ori 9, 9, 257
13580; PWR5-NEXT:    rldimi 7, 7, 32, 0
13581; PWR5-NEXT:    add 4, 5, 4
13582; PWR5-NEXT:    add 3, 3, 6
13583; PWR5-NEXT:    rldimi 9, 9, 32, 0
13584; PWR5-NEXT:    rldicl 5, 4, 60, 4
13585; PWR5-NEXT:    and 3, 3, 7
13586; PWR5-NEXT:    add 4, 4, 5
13587; PWR5-NEXT:    mulld 3, 3, 9
13588; PWR5-NEXT:    and 4, 4, 7
13589; PWR5-NEXT:    rldicl 3, 3, 8, 56
13590; PWR5-NEXT:    li 5, 8
13591; PWR5-NEXT:    mulld 4, 4, 9
13592; PWR5-NEXT:    subc 6, 3, 5
13593; PWR5-NEXT:    rldicl 4, 4, 8, 56
13594; PWR5-NEXT:    subfe 3, 3, 3
13595; PWR5-NEXT:    subc 5, 4, 5
13596; PWR5-NEXT:    subfe 4, 4, 4
13597; PWR5-NEXT:    blr
13598;
13599; PWR6-LABEL: ult_8_v2i64:
13600; PWR6:       # %bb.0:
13601; PWR6-NEXT:    lis 5, 21845
13602; PWR6-NEXT:    lis 6, 13107
13603; PWR6-NEXT:    ori 5, 5, 21845
13604; PWR6-NEXT:    rotldi 8, 4, 63
13605; PWR6-NEXT:    rotldi 9, 3, 63
13606; PWR6-NEXT:    rldimi 5, 5, 32, 0
13607; PWR6-NEXT:    and 8, 8, 5
13608; PWR6-NEXT:    and 5, 9, 5
13609; PWR6-NEXT:    ori 6, 6, 13107
13610; PWR6-NEXT:    sub 3, 3, 5
13611; PWR6-NEXT:    rldimi 6, 6, 32, 0
13612; PWR6-NEXT:    sub 4, 4, 8
13613; PWR6-NEXT:    and 8, 3, 6
13614; PWR6-NEXT:    rotldi 3, 3, 62
13615; PWR6-NEXT:    and 3, 3, 6
13616; PWR6-NEXT:    lis 7, 3855
13617; PWR6-NEXT:    and 5, 4, 6
13618; PWR6-NEXT:    rotldi 4, 4, 62
13619; PWR6-NEXT:    add 3, 8, 3
13620; PWR6-NEXT:    lis 9, 257
13621; PWR6-NEXT:    ori 7, 7, 3855
13622; PWR6-NEXT:    and 4, 4, 6
13623; PWR6-NEXT:    rldicl 6, 3, 60, 4
13624; PWR6-NEXT:    ori 9, 9, 257
13625; PWR6-NEXT:    rldimi 7, 7, 32, 0
13626; PWR6-NEXT:    add 4, 5, 4
13627; PWR6-NEXT:    add 3, 3, 6
13628; PWR6-NEXT:    rldimi 9, 9, 32, 0
13629; PWR6-NEXT:    rldicl 5, 4, 60, 4
13630; PWR6-NEXT:    and 3, 3, 7
13631; PWR6-NEXT:    add 4, 4, 5
13632; PWR6-NEXT:    mulld 3, 3, 9
13633; PWR6-NEXT:    and 4, 4, 7
13634; PWR6-NEXT:    rldicl 3, 3, 8, 56
13635; PWR6-NEXT:    li 5, 8
13636; PWR6-NEXT:    mulld 4, 4, 9
13637; PWR6-NEXT:    subc 6, 3, 5
13638; PWR6-NEXT:    rldicl 4, 4, 8, 56
13639; PWR6-NEXT:    subfe 3, 3, 3
13640; PWR6-NEXT:    subc 5, 4, 5
13641; PWR6-NEXT:    subfe 4, 4, 4
13642; PWR6-NEXT:    blr
13643;
13644; PWR7-LABEL: ult_8_v2i64:
13645; PWR7:       # %bb.0:
13646; PWR7-NEXT:    addi 3, 1, -32
13647; PWR7-NEXT:    li 5, 0
13648; PWR7-NEXT:    li 6, -1
13649; PWR7-NEXT:    stxvd2x 34, 0, 3
13650; PWR7-NEXT:    ld 3, -24(1)
13651; PWR7-NEXT:    ld 4, -32(1)
13652; PWR7-NEXT:    popcntd 3, 3
13653; PWR7-NEXT:    popcntd 4, 4
13654; PWR7-NEXT:    cmpldi 3, 8
13655; PWR7-NEXT:    isellt 3, 6, 5
13656; PWR7-NEXT:    cmpldi 4, 8
13657; PWR7-NEXT:    isellt 4, 6, 5
13658; PWR7-NEXT:    std 3, -8(1)
13659; PWR7-NEXT:    addi 3, 1, -16
13660; PWR7-NEXT:    std 4, -16(1)
13661; PWR7-NEXT:    lxvd2x 34, 0, 3
13662; PWR7-NEXT:    blr
13663;
13664; PWR8-LABEL: ult_8_v2i64:
13665; PWR8:       # %bb.0:
13666; PWR8-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
13667; PWR8-NEXT:    vpopcntd 2, 2
13668; PWR8-NEXT:    addi 3, 3, .LCPI113_0@toc@l
13669; PWR8-NEXT:    lxvd2x 35, 0, 3
13670; PWR8-NEXT:    vcmpgtud 2, 3, 2
13671; PWR8-NEXT:    blr
13672;
13673; PWR9-LABEL: ult_8_v2i64:
13674; PWR9:       # %bb.0:
13675; PWR9-NEXT:    addis 3, 2, .LCPI113_0@toc@ha
13676; PWR9-NEXT:    vpopcntd 2, 2
13677; PWR9-NEXT:    addi 3, 3, .LCPI113_0@toc@l
13678; PWR9-NEXT:    lxvx 35, 0, 3
13679; PWR9-NEXT:    vcmpgtud 2, 3, 2
13680; PWR9-NEXT:    blr
13681  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13682  %3 = icmp ult <2 x i64> %2, <i64 8, i64 8>
13683  %4 = sext <2 x i1> %3 to <2 x i64>
13684  ret <2 x i64> %4
13685}
13686
13687define <2 x i64> @ugt_8_v2i64(<2 x i64> %0) {
13688; PWR5-LABEL: ugt_8_v2i64:
13689; PWR5:       # %bb.0:
13690; PWR5-NEXT:    lis 5, 21845
13691; PWR5-NEXT:    lis 6, 13107
13692; PWR5-NEXT:    ori 5, 5, 21845
13693; PWR5-NEXT:    rotldi 8, 4, 63
13694; PWR5-NEXT:    rotldi 9, 3, 63
13695; PWR5-NEXT:    rldimi 5, 5, 32, 0
13696; PWR5-NEXT:    and 8, 8, 5
13697; PWR5-NEXT:    and 5, 9, 5
13698; PWR5-NEXT:    ori 6, 6, 13107
13699; PWR5-NEXT:    sub 3, 3, 5
13700; PWR5-NEXT:    rldimi 6, 6, 32, 0
13701; PWR5-NEXT:    sub 4, 4, 8
13702; PWR5-NEXT:    and 8, 3, 6
13703; PWR5-NEXT:    rotldi 3, 3, 62
13704; PWR5-NEXT:    and 3, 3, 6
13705; PWR5-NEXT:    lis 7, 3855
13706; PWR5-NEXT:    and 5, 4, 6
13707; PWR5-NEXT:    rotldi 4, 4, 62
13708; PWR5-NEXT:    add 3, 8, 3
13709; PWR5-NEXT:    lis 9, 257
13710; PWR5-NEXT:    ori 7, 7, 3855
13711; PWR5-NEXT:    and 4, 4, 6
13712; PWR5-NEXT:    rldicl 6, 3, 60, 4
13713; PWR5-NEXT:    ori 9, 9, 257
13714; PWR5-NEXT:    rldimi 7, 7, 32, 0
13715; PWR5-NEXT:    add 4, 5, 4
13716; PWR5-NEXT:    add 3, 3, 6
13717; PWR5-NEXT:    rldimi 9, 9, 32, 0
13718; PWR5-NEXT:    rldicl 5, 4, 60, 4
13719; PWR5-NEXT:    and 3, 3, 7
13720; PWR5-NEXT:    add 4, 4, 5
13721; PWR5-NEXT:    mulld 3, 3, 9
13722; PWR5-NEXT:    and 4, 4, 7
13723; PWR5-NEXT:    rldicl 3, 3, 8, 56
13724; PWR5-NEXT:    mulld 4, 4, 9
13725; PWR5-NEXT:    li 5, 8
13726; PWR5-NEXT:    subfic 3, 3, 8
13727; PWR5-NEXT:    rldicl 4, 4, 8, 56
13728; PWR5-NEXT:    subfe 3, 5, 5
13729; PWR5-NEXT:    subfic 4, 4, 8
13730; PWR5-NEXT:    subfe 4, 5, 5
13731; PWR5-NEXT:    blr
13732;
13733; PWR6-LABEL: ugt_8_v2i64:
13734; PWR6:       # %bb.0:
13735; PWR6-NEXT:    lis 5, 21845
13736; PWR6-NEXT:    lis 6, 13107
13737; PWR6-NEXT:    ori 5, 5, 21845
13738; PWR6-NEXT:    rotldi 8, 4, 63
13739; PWR6-NEXT:    rotldi 9, 3, 63
13740; PWR6-NEXT:    rldimi 5, 5, 32, 0
13741; PWR6-NEXT:    and 8, 8, 5
13742; PWR6-NEXT:    and 5, 9, 5
13743; PWR6-NEXT:    ori 6, 6, 13107
13744; PWR6-NEXT:    sub 3, 3, 5
13745; PWR6-NEXT:    rldimi 6, 6, 32, 0
13746; PWR6-NEXT:    sub 4, 4, 8
13747; PWR6-NEXT:    and 8, 3, 6
13748; PWR6-NEXT:    rotldi 3, 3, 62
13749; PWR6-NEXT:    and 3, 3, 6
13750; PWR6-NEXT:    lis 7, 3855
13751; PWR6-NEXT:    and 5, 4, 6
13752; PWR6-NEXT:    rotldi 4, 4, 62
13753; PWR6-NEXT:    add 3, 8, 3
13754; PWR6-NEXT:    lis 9, 257
13755; PWR6-NEXT:    ori 7, 7, 3855
13756; PWR6-NEXT:    and 4, 4, 6
13757; PWR6-NEXT:    rldicl 6, 3, 60, 4
13758; PWR6-NEXT:    ori 9, 9, 257
13759; PWR6-NEXT:    rldimi 7, 7, 32, 0
13760; PWR6-NEXT:    add 4, 5, 4
13761; PWR6-NEXT:    add 3, 3, 6
13762; PWR6-NEXT:    rldimi 9, 9, 32, 0
13763; PWR6-NEXT:    rldicl 5, 4, 60, 4
13764; PWR6-NEXT:    and 3, 3, 7
13765; PWR6-NEXT:    add 4, 4, 5
13766; PWR6-NEXT:    mulld 3, 3, 9
13767; PWR6-NEXT:    and 4, 4, 7
13768; PWR6-NEXT:    rldicl 3, 3, 8, 56
13769; PWR6-NEXT:    mulld 4, 4, 9
13770; PWR6-NEXT:    li 5, 8
13771; PWR6-NEXT:    subfic 3, 3, 8
13772; PWR6-NEXT:    rldicl 4, 4, 8, 56
13773; PWR6-NEXT:    subfe 3, 5, 5
13774; PWR6-NEXT:    subfic 4, 4, 8
13775; PWR6-NEXT:    subfe 4, 5, 5
13776; PWR6-NEXT:    blr
13777;
13778; PWR7-LABEL: ugt_8_v2i64:
13779; PWR7:       # %bb.0:
13780; PWR7-NEXT:    addi 3, 1, -32
13781; PWR7-NEXT:    li 5, 0
13782; PWR7-NEXT:    li 6, -1
13783; PWR7-NEXT:    stxvd2x 34, 0, 3
13784; PWR7-NEXT:    ld 3, -24(1)
13785; PWR7-NEXT:    ld 4, -32(1)
13786; PWR7-NEXT:    popcntd 3, 3
13787; PWR7-NEXT:    popcntd 4, 4
13788; PWR7-NEXT:    cmpldi 3, 8
13789; PWR7-NEXT:    iselgt 3, 6, 5
13790; PWR7-NEXT:    cmpldi 4, 8
13791; PWR7-NEXT:    iselgt 4, 6, 5
13792; PWR7-NEXT:    std 3, -8(1)
13793; PWR7-NEXT:    addi 3, 1, -16
13794; PWR7-NEXT:    std 4, -16(1)
13795; PWR7-NEXT:    lxvd2x 34, 0, 3
13796; PWR7-NEXT:    blr
13797;
13798; PWR8-LABEL: ugt_8_v2i64:
13799; PWR8:       # %bb.0:
13800; PWR8-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
13801; PWR8-NEXT:    vpopcntd 2, 2
13802; PWR8-NEXT:    addi 3, 3, .LCPI114_0@toc@l
13803; PWR8-NEXT:    lxvd2x 35, 0, 3
13804; PWR8-NEXT:    vcmpgtud 2, 2, 3
13805; PWR8-NEXT:    blr
13806;
13807; PWR9-LABEL: ugt_8_v2i64:
13808; PWR9:       # %bb.0:
13809; PWR9-NEXT:    addis 3, 2, .LCPI114_0@toc@ha
13810; PWR9-NEXT:    vpopcntd 2, 2
13811; PWR9-NEXT:    addi 3, 3, .LCPI114_0@toc@l
13812; PWR9-NEXT:    lxvx 35, 0, 3
13813; PWR9-NEXT:    vcmpgtud 2, 2, 3
13814; PWR9-NEXT:    blr
13815  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13816  %3 = icmp ugt <2 x i64> %2, <i64 8, i64 8>
13817  %4 = sext <2 x i1> %3 to <2 x i64>
13818  ret <2 x i64> %4
13819}
13820
13821define <2 x i64> @ult_9_v2i64(<2 x i64> %0) {
13822; PWR5-LABEL: ult_9_v2i64:
13823; PWR5:       # %bb.0:
13824; PWR5-NEXT:    lis 5, 21845
13825; PWR5-NEXT:    lis 6, 13107
13826; PWR5-NEXT:    ori 5, 5, 21845
13827; PWR5-NEXT:    rotldi 8, 4, 63
13828; PWR5-NEXT:    rotldi 9, 3, 63
13829; PWR5-NEXT:    rldimi 5, 5, 32, 0
13830; PWR5-NEXT:    and 8, 8, 5
13831; PWR5-NEXT:    and 5, 9, 5
13832; PWR5-NEXT:    ori 6, 6, 13107
13833; PWR5-NEXT:    sub 3, 3, 5
13834; PWR5-NEXT:    rldimi 6, 6, 32, 0
13835; PWR5-NEXT:    sub 4, 4, 8
13836; PWR5-NEXT:    and 8, 3, 6
13837; PWR5-NEXT:    rotldi 3, 3, 62
13838; PWR5-NEXT:    and 3, 3, 6
13839; PWR5-NEXT:    lis 7, 3855
13840; PWR5-NEXT:    and 5, 4, 6
13841; PWR5-NEXT:    rotldi 4, 4, 62
13842; PWR5-NEXT:    add 3, 8, 3
13843; PWR5-NEXT:    lis 9, 257
13844; PWR5-NEXT:    ori 7, 7, 3855
13845; PWR5-NEXT:    and 4, 4, 6
13846; PWR5-NEXT:    rldicl 6, 3, 60, 4
13847; PWR5-NEXT:    ori 9, 9, 257
13848; PWR5-NEXT:    rldimi 7, 7, 32, 0
13849; PWR5-NEXT:    add 4, 5, 4
13850; PWR5-NEXT:    add 3, 3, 6
13851; PWR5-NEXT:    rldimi 9, 9, 32, 0
13852; PWR5-NEXT:    rldicl 5, 4, 60, 4
13853; PWR5-NEXT:    and 3, 3, 7
13854; PWR5-NEXT:    add 4, 4, 5
13855; PWR5-NEXT:    mulld 3, 3, 9
13856; PWR5-NEXT:    and 4, 4, 7
13857; PWR5-NEXT:    rldicl 3, 3, 8, 56
13858; PWR5-NEXT:    li 5, 9
13859; PWR5-NEXT:    mulld 4, 4, 9
13860; PWR5-NEXT:    subc 6, 3, 5
13861; PWR5-NEXT:    rldicl 4, 4, 8, 56
13862; PWR5-NEXT:    subfe 3, 3, 3
13863; PWR5-NEXT:    subc 5, 4, 5
13864; PWR5-NEXT:    subfe 4, 4, 4
13865; PWR5-NEXT:    blr
13866;
13867; PWR6-LABEL: ult_9_v2i64:
13868; PWR6:       # %bb.0:
13869; PWR6-NEXT:    lis 5, 21845
13870; PWR6-NEXT:    lis 6, 13107
13871; PWR6-NEXT:    ori 5, 5, 21845
13872; PWR6-NEXT:    rotldi 8, 4, 63
13873; PWR6-NEXT:    rotldi 9, 3, 63
13874; PWR6-NEXT:    rldimi 5, 5, 32, 0
13875; PWR6-NEXT:    and 8, 8, 5
13876; PWR6-NEXT:    and 5, 9, 5
13877; PWR6-NEXT:    ori 6, 6, 13107
13878; PWR6-NEXT:    sub 3, 3, 5
13879; PWR6-NEXT:    rldimi 6, 6, 32, 0
13880; PWR6-NEXT:    sub 4, 4, 8
13881; PWR6-NEXT:    and 8, 3, 6
13882; PWR6-NEXT:    rotldi 3, 3, 62
13883; PWR6-NEXT:    and 3, 3, 6
13884; PWR6-NEXT:    lis 7, 3855
13885; PWR6-NEXT:    and 5, 4, 6
13886; PWR6-NEXT:    rotldi 4, 4, 62
13887; PWR6-NEXT:    add 3, 8, 3
13888; PWR6-NEXT:    lis 9, 257
13889; PWR6-NEXT:    ori 7, 7, 3855
13890; PWR6-NEXT:    and 4, 4, 6
13891; PWR6-NEXT:    rldicl 6, 3, 60, 4
13892; PWR6-NEXT:    ori 9, 9, 257
13893; PWR6-NEXT:    rldimi 7, 7, 32, 0
13894; PWR6-NEXT:    add 4, 5, 4
13895; PWR6-NEXT:    add 3, 3, 6
13896; PWR6-NEXT:    rldimi 9, 9, 32, 0
13897; PWR6-NEXT:    rldicl 5, 4, 60, 4
13898; PWR6-NEXT:    and 3, 3, 7
13899; PWR6-NEXT:    add 4, 4, 5
13900; PWR6-NEXT:    mulld 3, 3, 9
13901; PWR6-NEXT:    and 4, 4, 7
13902; PWR6-NEXT:    rldicl 3, 3, 8, 56
13903; PWR6-NEXT:    li 5, 9
13904; PWR6-NEXT:    mulld 4, 4, 9
13905; PWR6-NEXT:    subc 6, 3, 5
13906; PWR6-NEXT:    rldicl 4, 4, 8, 56
13907; PWR6-NEXT:    subfe 3, 3, 3
13908; PWR6-NEXT:    subc 5, 4, 5
13909; PWR6-NEXT:    subfe 4, 4, 4
13910; PWR6-NEXT:    blr
13911;
13912; PWR7-LABEL: ult_9_v2i64:
13913; PWR7:       # %bb.0:
13914; PWR7-NEXT:    addi 3, 1, -32
13915; PWR7-NEXT:    li 5, 0
13916; PWR7-NEXT:    li 6, -1
13917; PWR7-NEXT:    stxvd2x 34, 0, 3
13918; PWR7-NEXT:    ld 3, -24(1)
13919; PWR7-NEXT:    ld 4, -32(1)
13920; PWR7-NEXT:    popcntd 3, 3
13921; PWR7-NEXT:    popcntd 4, 4
13922; PWR7-NEXT:    cmpldi 3, 9
13923; PWR7-NEXT:    isellt 3, 6, 5
13924; PWR7-NEXT:    cmpldi 4, 9
13925; PWR7-NEXT:    isellt 4, 6, 5
13926; PWR7-NEXT:    std 3, -8(1)
13927; PWR7-NEXT:    addi 3, 1, -16
13928; PWR7-NEXT:    std 4, -16(1)
13929; PWR7-NEXT:    lxvd2x 34, 0, 3
13930; PWR7-NEXT:    blr
13931;
13932; PWR8-LABEL: ult_9_v2i64:
13933; PWR8:       # %bb.0:
13934; PWR8-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
13935; PWR8-NEXT:    vpopcntd 2, 2
13936; PWR8-NEXT:    addi 3, 3, .LCPI115_0@toc@l
13937; PWR8-NEXT:    lxvd2x 35, 0, 3
13938; PWR8-NEXT:    vcmpgtud 2, 3, 2
13939; PWR8-NEXT:    blr
13940;
13941; PWR9-LABEL: ult_9_v2i64:
13942; PWR9:       # %bb.0:
13943; PWR9-NEXT:    addis 3, 2, .LCPI115_0@toc@ha
13944; PWR9-NEXT:    vpopcntd 2, 2
13945; PWR9-NEXT:    addi 3, 3, .LCPI115_0@toc@l
13946; PWR9-NEXT:    lxvx 35, 0, 3
13947; PWR9-NEXT:    vcmpgtud 2, 3, 2
13948; PWR9-NEXT:    blr
13949  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
13950  %3 = icmp ult <2 x i64> %2, <i64 9, i64 9>
13951  %4 = sext <2 x i1> %3 to <2 x i64>
13952  ret <2 x i64> %4
13953}
13954
13955define <2 x i64> @ugt_9_v2i64(<2 x i64> %0) {
13956; PWR5-LABEL: ugt_9_v2i64:
13957; PWR5:       # %bb.0:
13958; PWR5-NEXT:    lis 5, 21845
13959; PWR5-NEXT:    lis 6, 13107
13960; PWR5-NEXT:    ori 5, 5, 21845
13961; PWR5-NEXT:    rotldi 8, 4, 63
13962; PWR5-NEXT:    rotldi 9, 3, 63
13963; PWR5-NEXT:    rldimi 5, 5, 32, 0
13964; PWR5-NEXT:    and 8, 8, 5
13965; PWR5-NEXT:    and 5, 9, 5
13966; PWR5-NEXT:    ori 6, 6, 13107
13967; PWR5-NEXT:    sub 3, 3, 5
13968; PWR5-NEXT:    rldimi 6, 6, 32, 0
13969; PWR5-NEXT:    sub 4, 4, 8
13970; PWR5-NEXT:    and 8, 3, 6
13971; PWR5-NEXT:    rotldi 3, 3, 62
13972; PWR5-NEXT:    and 3, 3, 6
13973; PWR5-NEXT:    lis 7, 3855
13974; PWR5-NEXT:    and 5, 4, 6
13975; PWR5-NEXT:    rotldi 4, 4, 62
13976; PWR5-NEXT:    add 3, 8, 3
13977; PWR5-NEXT:    lis 9, 257
13978; PWR5-NEXT:    ori 7, 7, 3855
13979; PWR5-NEXT:    and 4, 4, 6
13980; PWR5-NEXT:    rldicl 6, 3, 60, 4
13981; PWR5-NEXT:    ori 9, 9, 257
13982; PWR5-NEXT:    rldimi 7, 7, 32, 0
13983; PWR5-NEXT:    add 4, 5, 4
13984; PWR5-NEXT:    add 3, 3, 6
13985; PWR5-NEXT:    rldimi 9, 9, 32, 0
13986; PWR5-NEXT:    rldicl 5, 4, 60, 4
13987; PWR5-NEXT:    and 3, 3, 7
13988; PWR5-NEXT:    add 4, 4, 5
13989; PWR5-NEXT:    mulld 3, 3, 9
13990; PWR5-NEXT:    and 4, 4, 7
13991; PWR5-NEXT:    rldicl 3, 3, 8, 56
13992; PWR5-NEXT:    mulld 4, 4, 9
13993; PWR5-NEXT:    li 5, 9
13994; PWR5-NEXT:    subfic 3, 3, 9
13995; PWR5-NEXT:    rldicl 4, 4, 8, 56
13996; PWR5-NEXT:    subfe 3, 5, 5
13997; PWR5-NEXT:    subfic 4, 4, 9
13998; PWR5-NEXT:    subfe 4, 5, 5
13999; PWR5-NEXT:    blr
14000;
14001; PWR6-LABEL: ugt_9_v2i64:
14002; PWR6:       # %bb.0:
14003; PWR6-NEXT:    lis 5, 21845
14004; PWR6-NEXT:    lis 6, 13107
14005; PWR6-NEXT:    ori 5, 5, 21845
14006; PWR6-NEXT:    rotldi 8, 4, 63
14007; PWR6-NEXT:    rotldi 9, 3, 63
14008; PWR6-NEXT:    rldimi 5, 5, 32, 0
14009; PWR6-NEXT:    and 8, 8, 5
14010; PWR6-NEXT:    and 5, 9, 5
14011; PWR6-NEXT:    ori 6, 6, 13107
14012; PWR6-NEXT:    sub 3, 3, 5
14013; PWR6-NEXT:    rldimi 6, 6, 32, 0
14014; PWR6-NEXT:    sub 4, 4, 8
14015; PWR6-NEXT:    and 8, 3, 6
14016; PWR6-NEXT:    rotldi 3, 3, 62
14017; PWR6-NEXT:    and 3, 3, 6
14018; PWR6-NEXT:    lis 7, 3855
14019; PWR6-NEXT:    and 5, 4, 6
14020; PWR6-NEXT:    rotldi 4, 4, 62
14021; PWR6-NEXT:    add 3, 8, 3
14022; PWR6-NEXT:    lis 9, 257
14023; PWR6-NEXT:    ori 7, 7, 3855
14024; PWR6-NEXT:    and 4, 4, 6
14025; PWR6-NEXT:    rldicl 6, 3, 60, 4
14026; PWR6-NEXT:    ori 9, 9, 257
14027; PWR6-NEXT:    rldimi 7, 7, 32, 0
14028; PWR6-NEXT:    add 4, 5, 4
14029; PWR6-NEXT:    add 3, 3, 6
14030; PWR6-NEXT:    rldimi 9, 9, 32, 0
14031; PWR6-NEXT:    rldicl 5, 4, 60, 4
14032; PWR6-NEXT:    and 3, 3, 7
14033; PWR6-NEXT:    add 4, 4, 5
14034; PWR6-NEXT:    mulld 3, 3, 9
14035; PWR6-NEXT:    and 4, 4, 7
14036; PWR6-NEXT:    rldicl 3, 3, 8, 56
14037; PWR6-NEXT:    mulld 4, 4, 9
14038; PWR6-NEXT:    li 5, 9
14039; PWR6-NEXT:    subfic 3, 3, 9
14040; PWR6-NEXT:    rldicl 4, 4, 8, 56
14041; PWR6-NEXT:    subfe 3, 5, 5
14042; PWR6-NEXT:    subfic 4, 4, 9
14043; PWR6-NEXT:    subfe 4, 5, 5
14044; PWR6-NEXT:    blr
14045;
14046; PWR7-LABEL: ugt_9_v2i64:
14047; PWR7:       # %bb.0:
14048; PWR7-NEXT:    addi 3, 1, -32
14049; PWR7-NEXT:    li 5, 0
14050; PWR7-NEXT:    li 6, -1
14051; PWR7-NEXT:    stxvd2x 34, 0, 3
14052; PWR7-NEXT:    ld 3, -24(1)
14053; PWR7-NEXT:    ld 4, -32(1)
14054; PWR7-NEXT:    popcntd 3, 3
14055; PWR7-NEXT:    popcntd 4, 4
14056; PWR7-NEXT:    cmpldi 3, 9
14057; PWR7-NEXT:    iselgt 3, 6, 5
14058; PWR7-NEXT:    cmpldi 4, 9
14059; PWR7-NEXT:    iselgt 4, 6, 5
14060; PWR7-NEXT:    std 3, -8(1)
14061; PWR7-NEXT:    addi 3, 1, -16
14062; PWR7-NEXT:    std 4, -16(1)
14063; PWR7-NEXT:    lxvd2x 34, 0, 3
14064; PWR7-NEXT:    blr
14065;
14066; PWR8-LABEL: ugt_9_v2i64:
14067; PWR8:       # %bb.0:
14068; PWR8-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
14069; PWR8-NEXT:    vpopcntd 2, 2
14070; PWR8-NEXT:    addi 3, 3, .LCPI116_0@toc@l
14071; PWR8-NEXT:    lxvd2x 35, 0, 3
14072; PWR8-NEXT:    vcmpgtud 2, 2, 3
14073; PWR8-NEXT:    blr
14074;
14075; PWR9-LABEL: ugt_9_v2i64:
14076; PWR9:       # %bb.0:
14077; PWR9-NEXT:    addis 3, 2, .LCPI116_0@toc@ha
14078; PWR9-NEXT:    vpopcntd 2, 2
14079; PWR9-NEXT:    addi 3, 3, .LCPI116_0@toc@l
14080; PWR9-NEXT:    lxvx 35, 0, 3
14081; PWR9-NEXT:    vcmpgtud 2, 2, 3
14082; PWR9-NEXT:    blr
14083  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14084  %3 = icmp ugt <2 x i64> %2, <i64 9, i64 9>
14085  %4 = sext <2 x i1> %3 to <2 x i64>
14086  ret <2 x i64> %4
14087}
14088
14089define <2 x i64> @ult_10_v2i64(<2 x i64> %0) {
14090; PWR5-LABEL: ult_10_v2i64:
14091; PWR5:       # %bb.0:
14092; PWR5-NEXT:    lis 5, 21845
14093; PWR5-NEXT:    lis 6, 13107
14094; PWR5-NEXT:    ori 5, 5, 21845
14095; PWR5-NEXT:    rotldi 8, 4, 63
14096; PWR5-NEXT:    rotldi 9, 3, 63
14097; PWR5-NEXT:    rldimi 5, 5, 32, 0
14098; PWR5-NEXT:    and 8, 8, 5
14099; PWR5-NEXT:    and 5, 9, 5
14100; PWR5-NEXT:    ori 6, 6, 13107
14101; PWR5-NEXT:    sub 3, 3, 5
14102; PWR5-NEXT:    rldimi 6, 6, 32, 0
14103; PWR5-NEXT:    sub 4, 4, 8
14104; PWR5-NEXT:    and 8, 3, 6
14105; PWR5-NEXT:    rotldi 3, 3, 62
14106; PWR5-NEXT:    and 3, 3, 6
14107; PWR5-NEXT:    lis 7, 3855
14108; PWR5-NEXT:    and 5, 4, 6
14109; PWR5-NEXT:    rotldi 4, 4, 62
14110; PWR5-NEXT:    add 3, 8, 3
14111; PWR5-NEXT:    lis 9, 257
14112; PWR5-NEXT:    ori 7, 7, 3855
14113; PWR5-NEXT:    and 4, 4, 6
14114; PWR5-NEXT:    rldicl 6, 3, 60, 4
14115; PWR5-NEXT:    ori 9, 9, 257
14116; PWR5-NEXT:    rldimi 7, 7, 32, 0
14117; PWR5-NEXT:    add 4, 5, 4
14118; PWR5-NEXT:    add 3, 3, 6
14119; PWR5-NEXT:    rldimi 9, 9, 32, 0
14120; PWR5-NEXT:    rldicl 5, 4, 60, 4
14121; PWR5-NEXT:    and 3, 3, 7
14122; PWR5-NEXT:    add 4, 4, 5
14123; PWR5-NEXT:    mulld 3, 3, 9
14124; PWR5-NEXT:    and 4, 4, 7
14125; PWR5-NEXT:    rldicl 3, 3, 8, 56
14126; PWR5-NEXT:    li 5, 10
14127; PWR5-NEXT:    mulld 4, 4, 9
14128; PWR5-NEXT:    subc 6, 3, 5
14129; PWR5-NEXT:    rldicl 4, 4, 8, 56
14130; PWR5-NEXT:    subfe 3, 3, 3
14131; PWR5-NEXT:    subc 5, 4, 5
14132; PWR5-NEXT:    subfe 4, 4, 4
14133; PWR5-NEXT:    blr
14134;
14135; PWR6-LABEL: ult_10_v2i64:
14136; PWR6:       # %bb.0:
14137; PWR6-NEXT:    lis 5, 21845
14138; PWR6-NEXT:    lis 6, 13107
14139; PWR6-NEXT:    ori 5, 5, 21845
14140; PWR6-NEXT:    rotldi 8, 4, 63
14141; PWR6-NEXT:    rotldi 9, 3, 63
14142; PWR6-NEXT:    rldimi 5, 5, 32, 0
14143; PWR6-NEXT:    and 8, 8, 5
14144; PWR6-NEXT:    and 5, 9, 5
14145; PWR6-NEXT:    ori 6, 6, 13107
14146; PWR6-NEXT:    sub 3, 3, 5
14147; PWR6-NEXT:    rldimi 6, 6, 32, 0
14148; PWR6-NEXT:    sub 4, 4, 8
14149; PWR6-NEXT:    and 8, 3, 6
14150; PWR6-NEXT:    rotldi 3, 3, 62
14151; PWR6-NEXT:    and 3, 3, 6
14152; PWR6-NEXT:    lis 7, 3855
14153; PWR6-NEXT:    and 5, 4, 6
14154; PWR6-NEXT:    rotldi 4, 4, 62
14155; PWR6-NEXT:    add 3, 8, 3
14156; PWR6-NEXT:    lis 9, 257
14157; PWR6-NEXT:    ori 7, 7, 3855
14158; PWR6-NEXT:    and 4, 4, 6
14159; PWR6-NEXT:    rldicl 6, 3, 60, 4
14160; PWR6-NEXT:    ori 9, 9, 257
14161; PWR6-NEXT:    rldimi 7, 7, 32, 0
14162; PWR6-NEXT:    add 4, 5, 4
14163; PWR6-NEXT:    add 3, 3, 6
14164; PWR6-NEXT:    rldimi 9, 9, 32, 0
14165; PWR6-NEXT:    rldicl 5, 4, 60, 4
14166; PWR6-NEXT:    and 3, 3, 7
14167; PWR6-NEXT:    add 4, 4, 5
14168; PWR6-NEXT:    mulld 3, 3, 9
14169; PWR6-NEXT:    and 4, 4, 7
14170; PWR6-NEXT:    rldicl 3, 3, 8, 56
14171; PWR6-NEXT:    li 5, 10
14172; PWR6-NEXT:    mulld 4, 4, 9
14173; PWR6-NEXT:    subc 6, 3, 5
14174; PWR6-NEXT:    rldicl 4, 4, 8, 56
14175; PWR6-NEXT:    subfe 3, 3, 3
14176; PWR6-NEXT:    subc 5, 4, 5
14177; PWR6-NEXT:    subfe 4, 4, 4
14178; PWR6-NEXT:    blr
14179;
14180; PWR7-LABEL: ult_10_v2i64:
14181; PWR7:       # %bb.0:
14182; PWR7-NEXT:    addi 3, 1, -32
14183; PWR7-NEXT:    li 5, 0
14184; PWR7-NEXT:    li 6, -1
14185; PWR7-NEXT:    stxvd2x 34, 0, 3
14186; PWR7-NEXT:    ld 3, -24(1)
14187; PWR7-NEXT:    ld 4, -32(1)
14188; PWR7-NEXT:    popcntd 3, 3
14189; PWR7-NEXT:    popcntd 4, 4
14190; PWR7-NEXT:    cmpldi 3, 10
14191; PWR7-NEXT:    isellt 3, 6, 5
14192; PWR7-NEXT:    cmpldi 4, 10
14193; PWR7-NEXT:    isellt 4, 6, 5
14194; PWR7-NEXT:    std 3, -8(1)
14195; PWR7-NEXT:    addi 3, 1, -16
14196; PWR7-NEXT:    std 4, -16(1)
14197; PWR7-NEXT:    lxvd2x 34, 0, 3
14198; PWR7-NEXT:    blr
14199;
14200; PWR8-LABEL: ult_10_v2i64:
14201; PWR8:       # %bb.0:
14202; PWR8-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
14203; PWR8-NEXT:    vpopcntd 2, 2
14204; PWR8-NEXT:    addi 3, 3, .LCPI117_0@toc@l
14205; PWR8-NEXT:    lxvd2x 35, 0, 3
14206; PWR8-NEXT:    vcmpgtud 2, 3, 2
14207; PWR8-NEXT:    blr
14208;
14209; PWR9-LABEL: ult_10_v2i64:
14210; PWR9:       # %bb.0:
14211; PWR9-NEXT:    addis 3, 2, .LCPI117_0@toc@ha
14212; PWR9-NEXT:    vpopcntd 2, 2
14213; PWR9-NEXT:    addi 3, 3, .LCPI117_0@toc@l
14214; PWR9-NEXT:    lxvx 35, 0, 3
14215; PWR9-NEXT:    vcmpgtud 2, 3, 2
14216; PWR9-NEXT:    blr
14217  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14218  %3 = icmp ult <2 x i64> %2, <i64 10, i64 10>
14219  %4 = sext <2 x i1> %3 to <2 x i64>
14220  ret <2 x i64> %4
14221}
14222
14223define <2 x i64> @ugt_10_v2i64(<2 x i64> %0) {
14224; PWR5-LABEL: ugt_10_v2i64:
14225; PWR5:       # %bb.0:
14226; PWR5-NEXT:    lis 5, 21845
14227; PWR5-NEXT:    lis 6, 13107
14228; PWR5-NEXT:    ori 5, 5, 21845
14229; PWR5-NEXT:    rotldi 8, 4, 63
14230; PWR5-NEXT:    rotldi 9, 3, 63
14231; PWR5-NEXT:    rldimi 5, 5, 32, 0
14232; PWR5-NEXT:    and 8, 8, 5
14233; PWR5-NEXT:    and 5, 9, 5
14234; PWR5-NEXT:    ori 6, 6, 13107
14235; PWR5-NEXT:    sub 3, 3, 5
14236; PWR5-NEXT:    rldimi 6, 6, 32, 0
14237; PWR5-NEXT:    sub 4, 4, 8
14238; PWR5-NEXT:    and 8, 3, 6
14239; PWR5-NEXT:    rotldi 3, 3, 62
14240; PWR5-NEXT:    and 3, 3, 6
14241; PWR5-NEXT:    lis 7, 3855
14242; PWR5-NEXT:    and 5, 4, 6
14243; PWR5-NEXT:    rotldi 4, 4, 62
14244; PWR5-NEXT:    add 3, 8, 3
14245; PWR5-NEXT:    lis 9, 257
14246; PWR5-NEXT:    ori 7, 7, 3855
14247; PWR5-NEXT:    and 4, 4, 6
14248; PWR5-NEXT:    rldicl 6, 3, 60, 4
14249; PWR5-NEXT:    ori 9, 9, 257
14250; PWR5-NEXT:    rldimi 7, 7, 32, 0
14251; PWR5-NEXT:    add 4, 5, 4
14252; PWR5-NEXT:    add 3, 3, 6
14253; PWR5-NEXT:    rldimi 9, 9, 32, 0
14254; PWR5-NEXT:    rldicl 5, 4, 60, 4
14255; PWR5-NEXT:    and 3, 3, 7
14256; PWR5-NEXT:    add 4, 4, 5
14257; PWR5-NEXT:    mulld 3, 3, 9
14258; PWR5-NEXT:    and 4, 4, 7
14259; PWR5-NEXT:    rldicl 3, 3, 8, 56
14260; PWR5-NEXT:    mulld 4, 4, 9
14261; PWR5-NEXT:    li 5, 10
14262; PWR5-NEXT:    subfic 3, 3, 10
14263; PWR5-NEXT:    rldicl 4, 4, 8, 56
14264; PWR5-NEXT:    subfe 3, 5, 5
14265; PWR5-NEXT:    subfic 4, 4, 10
14266; PWR5-NEXT:    subfe 4, 5, 5
14267; PWR5-NEXT:    blr
14268;
14269; PWR6-LABEL: ugt_10_v2i64:
14270; PWR6:       # %bb.0:
14271; PWR6-NEXT:    lis 5, 21845
14272; PWR6-NEXT:    lis 6, 13107
14273; PWR6-NEXT:    ori 5, 5, 21845
14274; PWR6-NEXT:    rotldi 8, 4, 63
14275; PWR6-NEXT:    rotldi 9, 3, 63
14276; PWR6-NEXT:    rldimi 5, 5, 32, 0
14277; PWR6-NEXT:    and 8, 8, 5
14278; PWR6-NEXT:    and 5, 9, 5
14279; PWR6-NEXT:    ori 6, 6, 13107
14280; PWR6-NEXT:    sub 3, 3, 5
14281; PWR6-NEXT:    rldimi 6, 6, 32, 0
14282; PWR6-NEXT:    sub 4, 4, 8
14283; PWR6-NEXT:    and 8, 3, 6
14284; PWR6-NEXT:    rotldi 3, 3, 62
14285; PWR6-NEXT:    and 3, 3, 6
14286; PWR6-NEXT:    lis 7, 3855
14287; PWR6-NEXT:    and 5, 4, 6
14288; PWR6-NEXT:    rotldi 4, 4, 62
14289; PWR6-NEXT:    add 3, 8, 3
14290; PWR6-NEXT:    lis 9, 257
14291; PWR6-NEXT:    ori 7, 7, 3855
14292; PWR6-NEXT:    and 4, 4, 6
14293; PWR6-NEXT:    rldicl 6, 3, 60, 4
14294; PWR6-NEXT:    ori 9, 9, 257
14295; PWR6-NEXT:    rldimi 7, 7, 32, 0
14296; PWR6-NEXT:    add 4, 5, 4
14297; PWR6-NEXT:    add 3, 3, 6
14298; PWR6-NEXT:    rldimi 9, 9, 32, 0
14299; PWR6-NEXT:    rldicl 5, 4, 60, 4
14300; PWR6-NEXT:    and 3, 3, 7
14301; PWR6-NEXT:    add 4, 4, 5
14302; PWR6-NEXT:    mulld 3, 3, 9
14303; PWR6-NEXT:    and 4, 4, 7
14304; PWR6-NEXT:    rldicl 3, 3, 8, 56
14305; PWR6-NEXT:    mulld 4, 4, 9
14306; PWR6-NEXT:    li 5, 10
14307; PWR6-NEXT:    subfic 3, 3, 10
14308; PWR6-NEXT:    rldicl 4, 4, 8, 56
14309; PWR6-NEXT:    subfe 3, 5, 5
14310; PWR6-NEXT:    subfic 4, 4, 10
14311; PWR6-NEXT:    subfe 4, 5, 5
14312; PWR6-NEXT:    blr
14313;
14314; PWR7-LABEL: ugt_10_v2i64:
14315; PWR7:       # %bb.0:
14316; PWR7-NEXT:    addi 3, 1, -32
14317; PWR7-NEXT:    li 5, 0
14318; PWR7-NEXT:    li 6, -1
14319; PWR7-NEXT:    stxvd2x 34, 0, 3
14320; PWR7-NEXT:    ld 3, -24(1)
14321; PWR7-NEXT:    ld 4, -32(1)
14322; PWR7-NEXT:    popcntd 3, 3
14323; PWR7-NEXT:    popcntd 4, 4
14324; PWR7-NEXT:    cmpldi 3, 10
14325; PWR7-NEXT:    iselgt 3, 6, 5
14326; PWR7-NEXT:    cmpldi 4, 10
14327; PWR7-NEXT:    iselgt 4, 6, 5
14328; PWR7-NEXT:    std 3, -8(1)
14329; PWR7-NEXT:    addi 3, 1, -16
14330; PWR7-NEXT:    std 4, -16(1)
14331; PWR7-NEXT:    lxvd2x 34, 0, 3
14332; PWR7-NEXT:    blr
14333;
14334; PWR8-LABEL: ugt_10_v2i64:
14335; PWR8:       # %bb.0:
14336; PWR8-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
14337; PWR8-NEXT:    vpopcntd 2, 2
14338; PWR8-NEXT:    addi 3, 3, .LCPI118_0@toc@l
14339; PWR8-NEXT:    lxvd2x 35, 0, 3
14340; PWR8-NEXT:    vcmpgtud 2, 2, 3
14341; PWR8-NEXT:    blr
14342;
14343; PWR9-LABEL: ugt_10_v2i64:
14344; PWR9:       # %bb.0:
14345; PWR9-NEXT:    addis 3, 2, .LCPI118_0@toc@ha
14346; PWR9-NEXT:    vpopcntd 2, 2
14347; PWR9-NEXT:    addi 3, 3, .LCPI118_0@toc@l
14348; PWR9-NEXT:    lxvx 35, 0, 3
14349; PWR9-NEXT:    vcmpgtud 2, 2, 3
14350; PWR9-NEXT:    blr
14351  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14352  %3 = icmp ugt <2 x i64> %2, <i64 10, i64 10>
14353  %4 = sext <2 x i1> %3 to <2 x i64>
14354  ret <2 x i64> %4
14355}
14356
14357define <2 x i64> @ult_11_v2i64(<2 x i64> %0) {
14358; PWR5-LABEL: ult_11_v2i64:
14359; PWR5:       # %bb.0:
14360; PWR5-NEXT:    lis 5, 21845
14361; PWR5-NEXT:    lis 6, 13107
14362; PWR5-NEXT:    ori 5, 5, 21845
14363; PWR5-NEXT:    rotldi 8, 4, 63
14364; PWR5-NEXT:    rotldi 9, 3, 63
14365; PWR5-NEXT:    rldimi 5, 5, 32, 0
14366; PWR5-NEXT:    and 8, 8, 5
14367; PWR5-NEXT:    and 5, 9, 5
14368; PWR5-NEXT:    ori 6, 6, 13107
14369; PWR5-NEXT:    sub 3, 3, 5
14370; PWR5-NEXT:    rldimi 6, 6, 32, 0
14371; PWR5-NEXT:    sub 4, 4, 8
14372; PWR5-NEXT:    and 8, 3, 6
14373; PWR5-NEXT:    rotldi 3, 3, 62
14374; PWR5-NEXT:    and 3, 3, 6
14375; PWR5-NEXT:    lis 7, 3855
14376; PWR5-NEXT:    and 5, 4, 6
14377; PWR5-NEXT:    rotldi 4, 4, 62
14378; PWR5-NEXT:    add 3, 8, 3
14379; PWR5-NEXT:    lis 9, 257
14380; PWR5-NEXT:    ori 7, 7, 3855
14381; PWR5-NEXT:    and 4, 4, 6
14382; PWR5-NEXT:    rldicl 6, 3, 60, 4
14383; PWR5-NEXT:    ori 9, 9, 257
14384; PWR5-NEXT:    rldimi 7, 7, 32, 0
14385; PWR5-NEXT:    add 4, 5, 4
14386; PWR5-NEXT:    add 3, 3, 6
14387; PWR5-NEXT:    rldimi 9, 9, 32, 0
14388; PWR5-NEXT:    rldicl 5, 4, 60, 4
14389; PWR5-NEXT:    and 3, 3, 7
14390; PWR5-NEXT:    add 4, 4, 5
14391; PWR5-NEXT:    mulld 3, 3, 9
14392; PWR5-NEXT:    and 4, 4, 7
14393; PWR5-NEXT:    rldicl 3, 3, 8, 56
14394; PWR5-NEXT:    li 5, 11
14395; PWR5-NEXT:    mulld 4, 4, 9
14396; PWR5-NEXT:    subc 6, 3, 5
14397; PWR5-NEXT:    rldicl 4, 4, 8, 56
14398; PWR5-NEXT:    subfe 3, 3, 3
14399; PWR5-NEXT:    subc 5, 4, 5
14400; PWR5-NEXT:    subfe 4, 4, 4
14401; PWR5-NEXT:    blr
14402;
14403; PWR6-LABEL: ult_11_v2i64:
14404; PWR6:       # %bb.0:
14405; PWR6-NEXT:    lis 5, 21845
14406; PWR6-NEXT:    lis 6, 13107
14407; PWR6-NEXT:    ori 5, 5, 21845
14408; PWR6-NEXT:    rotldi 8, 4, 63
14409; PWR6-NEXT:    rotldi 9, 3, 63
14410; PWR6-NEXT:    rldimi 5, 5, 32, 0
14411; PWR6-NEXT:    and 8, 8, 5
14412; PWR6-NEXT:    and 5, 9, 5
14413; PWR6-NEXT:    ori 6, 6, 13107
14414; PWR6-NEXT:    sub 3, 3, 5
14415; PWR6-NEXT:    rldimi 6, 6, 32, 0
14416; PWR6-NEXT:    sub 4, 4, 8
14417; PWR6-NEXT:    and 8, 3, 6
14418; PWR6-NEXT:    rotldi 3, 3, 62
14419; PWR6-NEXT:    and 3, 3, 6
14420; PWR6-NEXT:    lis 7, 3855
14421; PWR6-NEXT:    and 5, 4, 6
14422; PWR6-NEXT:    rotldi 4, 4, 62
14423; PWR6-NEXT:    add 3, 8, 3
14424; PWR6-NEXT:    lis 9, 257
14425; PWR6-NEXT:    ori 7, 7, 3855
14426; PWR6-NEXT:    and 4, 4, 6
14427; PWR6-NEXT:    rldicl 6, 3, 60, 4
14428; PWR6-NEXT:    ori 9, 9, 257
14429; PWR6-NEXT:    rldimi 7, 7, 32, 0
14430; PWR6-NEXT:    add 4, 5, 4
14431; PWR6-NEXT:    add 3, 3, 6
14432; PWR6-NEXT:    rldimi 9, 9, 32, 0
14433; PWR6-NEXT:    rldicl 5, 4, 60, 4
14434; PWR6-NEXT:    and 3, 3, 7
14435; PWR6-NEXT:    add 4, 4, 5
14436; PWR6-NEXT:    mulld 3, 3, 9
14437; PWR6-NEXT:    and 4, 4, 7
14438; PWR6-NEXT:    rldicl 3, 3, 8, 56
14439; PWR6-NEXT:    li 5, 11
14440; PWR6-NEXT:    mulld 4, 4, 9
14441; PWR6-NEXT:    subc 6, 3, 5
14442; PWR6-NEXT:    rldicl 4, 4, 8, 56
14443; PWR6-NEXT:    subfe 3, 3, 3
14444; PWR6-NEXT:    subc 5, 4, 5
14445; PWR6-NEXT:    subfe 4, 4, 4
14446; PWR6-NEXT:    blr
14447;
14448; PWR7-LABEL: ult_11_v2i64:
14449; PWR7:       # %bb.0:
14450; PWR7-NEXT:    addi 3, 1, -32
14451; PWR7-NEXT:    li 5, 0
14452; PWR7-NEXT:    li 6, -1
14453; PWR7-NEXT:    stxvd2x 34, 0, 3
14454; PWR7-NEXT:    ld 3, -24(1)
14455; PWR7-NEXT:    ld 4, -32(1)
14456; PWR7-NEXT:    popcntd 3, 3
14457; PWR7-NEXT:    popcntd 4, 4
14458; PWR7-NEXT:    cmpldi 3, 11
14459; PWR7-NEXT:    isellt 3, 6, 5
14460; PWR7-NEXT:    cmpldi 4, 11
14461; PWR7-NEXT:    isellt 4, 6, 5
14462; PWR7-NEXT:    std 3, -8(1)
14463; PWR7-NEXT:    addi 3, 1, -16
14464; PWR7-NEXT:    std 4, -16(1)
14465; PWR7-NEXT:    lxvd2x 34, 0, 3
14466; PWR7-NEXT:    blr
14467;
14468; PWR8-LABEL: ult_11_v2i64:
14469; PWR8:       # %bb.0:
14470; PWR8-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
14471; PWR8-NEXT:    vpopcntd 2, 2
14472; PWR8-NEXT:    addi 3, 3, .LCPI119_0@toc@l
14473; PWR8-NEXT:    lxvd2x 35, 0, 3
14474; PWR8-NEXT:    vcmpgtud 2, 3, 2
14475; PWR8-NEXT:    blr
14476;
14477; PWR9-LABEL: ult_11_v2i64:
14478; PWR9:       # %bb.0:
14479; PWR9-NEXT:    addis 3, 2, .LCPI119_0@toc@ha
14480; PWR9-NEXT:    vpopcntd 2, 2
14481; PWR9-NEXT:    addi 3, 3, .LCPI119_0@toc@l
14482; PWR9-NEXT:    lxvx 35, 0, 3
14483; PWR9-NEXT:    vcmpgtud 2, 3, 2
14484; PWR9-NEXT:    blr
14485  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14486  %3 = icmp ult <2 x i64> %2, <i64 11, i64 11>
14487  %4 = sext <2 x i1> %3 to <2 x i64>
14488  ret <2 x i64> %4
14489}
14490
14491define <2 x i64> @ugt_11_v2i64(<2 x i64> %0) {
14492; PWR5-LABEL: ugt_11_v2i64:
14493; PWR5:       # %bb.0:
14494; PWR5-NEXT:    lis 5, 21845
14495; PWR5-NEXT:    lis 6, 13107
14496; PWR5-NEXT:    ori 5, 5, 21845
14497; PWR5-NEXT:    rotldi 8, 4, 63
14498; PWR5-NEXT:    rotldi 9, 3, 63
14499; PWR5-NEXT:    rldimi 5, 5, 32, 0
14500; PWR5-NEXT:    and 8, 8, 5
14501; PWR5-NEXT:    and 5, 9, 5
14502; PWR5-NEXT:    ori 6, 6, 13107
14503; PWR5-NEXT:    sub 3, 3, 5
14504; PWR5-NEXT:    rldimi 6, 6, 32, 0
14505; PWR5-NEXT:    sub 4, 4, 8
14506; PWR5-NEXT:    and 8, 3, 6
14507; PWR5-NEXT:    rotldi 3, 3, 62
14508; PWR5-NEXT:    and 3, 3, 6
14509; PWR5-NEXT:    lis 7, 3855
14510; PWR5-NEXT:    and 5, 4, 6
14511; PWR5-NEXT:    rotldi 4, 4, 62
14512; PWR5-NEXT:    add 3, 8, 3
14513; PWR5-NEXT:    lis 9, 257
14514; PWR5-NEXT:    ori 7, 7, 3855
14515; PWR5-NEXT:    and 4, 4, 6
14516; PWR5-NEXT:    rldicl 6, 3, 60, 4
14517; PWR5-NEXT:    ori 9, 9, 257
14518; PWR5-NEXT:    rldimi 7, 7, 32, 0
14519; PWR5-NEXT:    add 4, 5, 4
14520; PWR5-NEXT:    add 3, 3, 6
14521; PWR5-NEXT:    rldimi 9, 9, 32, 0
14522; PWR5-NEXT:    rldicl 5, 4, 60, 4
14523; PWR5-NEXT:    and 3, 3, 7
14524; PWR5-NEXT:    add 4, 4, 5
14525; PWR5-NEXT:    mulld 3, 3, 9
14526; PWR5-NEXT:    and 4, 4, 7
14527; PWR5-NEXT:    rldicl 3, 3, 8, 56
14528; PWR5-NEXT:    mulld 4, 4, 9
14529; PWR5-NEXT:    li 5, 11
14530; PWR5-NEXT:    subfic 3, 3, 11
14531; PWR5-NEXT:    rldicl 4, 4, 8, 56
14532; PWR5-NEXT:    subfe 3, 5, 5
14533; PWR5-NEXT:    subfic 4, 4, 11
14534; PWR5-NEXT:    subfe 4, 5, 5
14535; PWR5-NEXT:    blr
14536;
14537; PWR6-LABEL: ugt_11_v2i64:
14538; PWR6:       # %bb.0:
14539; PWR6-NEXT:    lis 5, 21845
14540; PWR6-NEXT:    lis 6, 13107
14541; PWR6-NEXT:    ori 5, 5, 21845
14542; PWR6-NEXT:    rotldi 8, 4, 63
14543; PWR6-NEXT:    rotldi 9, 3, 63
14544; PWR6-NEXT:    rldimi 5, 5, 32, 0
14545; PWR6-NEXT:    and 8, 8, 5
14546; PWR6-NEXT:    and 5, 9, 5
14547; PWR6-NEXT:    ori 6, 6, 13107
14548; PWR6-NEXT:    sub 3, 3, 5
14549; PWR6-NEXT:    rldimi 6, 6, 32, 0
14550; PWR6-NEXT:    sub 4, 4, 8
14551; PWR6-NEXT:    and 8, 3, 6
14552; PWR6-NEXT:    rotldi 3, 3, 62
14553; PWR6-NEXT:    and 3, 3, 6
14554; PWR6-NEXT:    lis 7, 3855
14555; PWR6-NEXT:    and 5, 4, 6
14556; PWR6-NEXT:    rotldi 4, 4, 62
14557; PWR6-NEXT:    add 3, 8, 3
14558; PWR6-NEXT:    lis 9, 257
14559; PWR6-NEXT:    ori 7, 7, 3855
14560; PWR6-NEXT:    and 4, 4, 6
14561; PWR6-NEXT:    rldicl 6, 3, 60, 4
14562; PWR6-NEXT:    ori 9, 9, 257
14563; PWR6-NEXT:    rldimi 7, 7, 32, 0
14564; PWR6-NEXT:    add 4, 5, 4
14565; PWR6-NEXT:    add 3, 3, 6
14566; PWR6-NEXT:    rldimi 9, 9, 32, 0
14567; PWR6-NEXT:    rldicl 5, 4, 60, 4
14568; PWR6-NEXT:    and 3, 3, 7
14569; PWR6-NEXT:    add 4, 4, 5
14570; PWR6-NEXT:    mulld 3, 3, 9
14571; PWR6-NEXT:    and 4, 4, 7
14572; PWR6-NEXT:    rldicl 3, 3, 8, 56
14573; PWR6-NEXT:    mulld 4, 4, 9
14574; PWR6-NEXT:    li 5, 11
14575; PWR6-NEXT:    subfic 3, 3, 11
14576; PWR6-NEXT:    rldicl 4, 4, 8, 56
14577; PWR6-NEXT:    subfe 3, 5, 5
14578; PWR6-NEXT:    subfic 4, 4, 11
14579; PWR6-NEXT:    subfe 4, 5, 5
14580; PWR6-NEXT:    blr
14581;
14582; PWR7-LABEL: ugt_11_v2i64:
14583; PWR7:       # %bb.0:
14584; PWR7-NEXT:    addi 3, 1, -32
14585; PWR7-NEXT:    li 5, 0
14586; PWR7-NEXT:    li 6, -1
14587; PWR7-NEXT:    stxvd2x 34, 0, 3
14588; PWR7-NEXT:    ld 3, -24(1)
14589; PWR7-NEXT:    ld 4, -32(1)
14590; PWR7-NEXT:    popcntd 3, 3
14591; PWR7-NEXT:    popcntd 4, 4
14592; PWR7-NEXT:    cmpldi 3, 11
14593; PWR7-NEXT:    iselgt 3, 6, 5
14594; PWR7-NEXT:    cmpldi 4, 11
14595; PWR7-NEXT:    iselgt 4, 6, 5
14596; PWR7-NEXT:    std 3, -8(1)
14597; PWR7-NEXT:    addi 3, 1, -16
14598; PWR7-NEXT:    std 4, -16(1)
14599; PWR7-NEXT:    lxvd2x 34, 0, 3
14600; PWR7-NEXT:    blr
14601;
14602; PWR8-LABEL: ugt_11_v2i64:
14603; PWR8:       # %bb.0:
14604; PWR8-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
14605; PWR8-NEXT:    vpopcntd 2, 2
14606; PWR8-NEXT:    addi 3, 3, .LCPI120_0@toc@l
14607; PWR8-NEXT:    lxvd2x 35, 0, 3
14608; PWR8-NEXT:    vcmpgtud 2, 2, 3
14609; PWR8-NEXT:    blr
14610;
14611; PWR9-LABEL: ugt_11_v2i64:
14612; PWR9:       # %bb.0:
14613; PWR9-NEXT:    addis 3, 2, .LCPI120_0@toc@ha
14614; PWR9-NEXT:    vpopcntd 2, 2
14615; PWR9-NEXT:    addi 3, 3, .LCPI120_0@toc@l
14616; PWR9-NEXT:    lxvx 35, 0, 3
14617; PWR9-NEXT:    vcmpgtud 2, 2, 3
14618; PWR9-NEXT:    blr
14619  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14620  %3 = icmp ugt <2 x i64> %2, <i64 11, i64 11>
14621  %4 = sext <2 x i1> %3 to <2 x i64>
14622  ret <2 x i64> %4
14623}
14624
14625define <2 x i64> @ult_12_v2i64(<2 x i64> %0) {
14626; PWR5-LABEL: ult_12_v2i64:
14627; PWR5:       # %bb.0:
14628; PWR5-NEXT:    lis 5, 21845
14629; PWR5-NEXT:    lis 6, 13107
14630; PWR5-NEXT:    ori 5, 5, 21845
14631; PWR5-NEXT:    rotldi 8, 4, 63
14632; PWR5-NEXT:    rotldi 9, 3, 63
14633; PWR5-NEXT:    rldimi 5, 5, 32, 0
14634; PWR5-NEXT:    and 8, 8, 5
14635; PWR5-NEXT:    and 5, 9, 5
14636; PWR5-NEXT:    ori 6, 6, 13107
14637; PWR5-NEXT:    sub 3, 3, 5
14638; PWR5-NEXT:    rldimi 6, 6, 32, 0
14639; PWR5-NEXT:    sub 4, 4, 8
14640; PWR5-NEXT:    and 8, 3, 6
14641; PWR5-NEXT:    rotldi 3, 3, 62
14642; PWR5-NEXT:    and 3, 3, 6
14643; PWR5-NEXT:    lis 7, 3855
14644; PWR5-NEXT:    and 5, 4, 6
14645; PWR5-NEXT:    rotldi 4, 4, 62
14646; PWR5-NEXT:    add 3, 8, 3
14647; PWR5-NEXT:    lis 9, 257
14648; PWR5-NEXT:    ori 7, 7, 3855
14649; PWR5-NEXT:    and 4, 4, 6
14650; PWR5-NEXT:    rldicl 6, 3, 60, 4
14651; PWR5-NEXT:    ori 9, 9, 257
14652; PWR5-NEXT:    rldimi 7, 7, 32, 0
14653; PWR5-NEXT:    add 4, 5, 4
14654; PWR5-NEXT:    add 3, 3, 6
14655; PWR5-NEXT:    rldimi 9, 9, 32, 0
14656; PWR5-NEXT:    rldicl 5, 4, 60, 4
14657; PWR5-NEXT:    and 3, 3, 7
14658; PWR5-NEXT:    add 4, 4, 5
14659; PWR5-NEXT:    mulld 3, 3, 9
14660; PWR5-NEXT:    and 4, 4, 7
14661; PWR5-NEXT:    rldicl 3, 3, 8, 56
14662; PWR5-NEXT:    li 5, 12
14663; PWR5-NEXT:    mulld 4, 4, 9
14664; PWR5-NEXT:    subc 6, 3, 5
14665; PWR5-NEXT:    rldicl 4, 4, 8, 56
14666; PWR5-NEXT:    subfe 3, 3, 3
14667; PWR5-NEXT:    subc 5, 4, 5
14668; PWR5-NEXT:    subfe 4, 4, 4
14669; PWR5-NEXT:    blr
14670;
14671; PWR6-LABEL: ult_12_v2i64:
14672; PWR6:       # %bb.0:
14673; PWR6-NEXT:    lis 5, 21845
14674; PWR6-NEXT:    lis 6, 13107
14675; PWR6-NEXT:    ori 5, 5, 21845
14676; PWR6-NEXT:    rotldi 8, 4, 63
14677; PWR6-NEXT:    rotldi 9, 3, 63
14678; PWR6-NEXT:    rldimi 5, 5, 32, 0
14679; PWR6-NEXT:    and 8, 8, 5
14680; PWR6-NEXT:    and 5, 9, 5
14681; PWR6-NEXT:    ori 6, 6, 13107
14682; PWR6-NEXT:    sub 3, 3, 5
14683; PWR6-NEXT:    rldimi 6, 6, 32, 0
14684; PWR6-NEXT:    sub 4, 4, 8
14685; PWR6-NEXT:    and 8, 3, 6
14686; PWR6-NEXT:    rotldi 3, 3, 62
14687; PWR6-NEXT:    and 3, 3, 6
14688; PWR6-NEXT:    lis 7, 3855
14689; PWR6-NEXT:    and 5, 4, 6
14690; PWR6-NEXT:    rotldi 4, 4, 62
14691; PWR6-NEXT:    add 3, 8, 3
14692; PWR6-NEXT:    lis 9, 257
14693; PWR6-NEXT:    ori 7, 7, 3855
14694; PWR6-NEXT:    and 4, 4, 6
14695; PWR6-NEXT:    rldicl 6, 3, 60, 4
14696; PWR6-NEXT:    ori 9, 9, 257
14697; PWR6-NEXT:    rldimi 7, 7, 32, 0
14698; PWR6-NEXT:    add 4, 5, 4
14699; PWR6-NEXT:    add 3, 3, 6
14700; PWR6-NEXT:    rldimi 9, 9, 32, 0
14701; PWR6-NEXT:    rldicl 5, 4, 60, 4
14702; PWR6-NEXT:    and 3, 3, 7
14703; PWR6-NEXT:    add 4, 4, 5
14704; PWR6-NEXT:    mulld 3, 3, 9
14705; PWR6-NEXT:    and 4, 4, 7
14706; PWR6-NEXT:    rldicl 3, 3, 8, 56
14707; PWR6-NEXT:    li 5, 12
14708; PWR6-NEXT:    mulld 4, 4, 9
14709; PWR6-NEXT:    subc 6, 3, 5
14710; PWR6-NEXT:    rldicl 4, 4, 8, 56
14711; PWR6-NEXT:    subfe 3, 3, 3
14712; PWR6-NEXT:    subc 5, 4, 5
14713; PWR6-NEXT:    subfe 4, 4, 4
14714; PWR6-NEXT:    blr
14715;
14716; PWR7-LABEL: ult_12_v2i64:
14717; PWR7:       # %bb.0:
14718; PWR7-NEXT:    addi 3, 1, -32
14719; PWR7-NEXT:    li 5, 0
14720; PWR7-NEXT:    li 6, -1
14721; PWR7-NEXT:    stxvd2x 34, 0, 3
14722; PWR7-NEXT:    ld 3, -24(1)
14723; PWR7-NEXT:    ld 4, -32(1)
14724; PWR7-NEXT:    popcntd 3, 3
14725; PWR7-NEXT:    popcntd 4, 4
14726; PWR7-NEXT:    cmpldi 3, 12
14727; PWR7-NEXT:    isellt 3, 6, 5
14728; PWR7-NEXT:    cmpldi 4, 12
14729; PWR7-NEXT:    isellt 4, 6, 5
14730; PWR7-NEXT:    std 3, -8(1)
14731; PWR7-NEXT:    addi 3, 1, -16
14732; PWR7-NEXT:    std 4, -16(1)
14733; PWR7-NEXT:    lxvd2x 34, 0, 3
14734; PWR7-NEXT:    blr
14735;
14736; PWR8-LABEL: ult_12_v2i64:
14737; PWR8:       # %bb.0:
14738; PWR8-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
14739; PWR8-NEXT:    vpopcntd 2, 2
14740; PWR8-NEXT:    addi 3, 3, .LCPI121_0@toc@l
14741; PWR8-NEXT:    lxvd2x 35, 0, 3
14742; PWR8-NEXT:    vcmpgtud 2, 3, 2
14743; PWR8-NEXT:    blr
14744;
14745; PWR9-LABEL: ult_12_v2i64:
14746; PWR9:       # %bb.0:
14747; PWR9-NEXT:    addis 3, 2, .LCPI121_0@toc@ha
14748; PWR9-NEXT:    vpopcntd 2, 2
14749; PWR9-NEXT:    addi 3, 3, .LCPI121_0@toc@l
14750; PWR9-NEXT:    lxvx 35, 0, 3
14751; PWR9-NEXT:    vcmpgtud 2, 3, 2
14752; PWR9-NEXT:    blr
14753  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14754  %3 = icmp ult <2 x i64> %2, <i64 12, i64 12>
14755  %4 = sext <2 x i1> %3 to <2 x i64>
14756  ret <2 x i64> %4
14757}
14758
14759define <2 x i64> @ugt_12_v2i64(<2 x i64> %0) {
14760; PWR5-LABEL: ugt_12_v2i64:
14761; PWR5:       # %bb.0:
14762; PWR5-NEXT:    lis 5, 21845
14763; PWR5-NEXT:    lis 6, 13107
14764; PWR5-NEXT:    ori 5, 5, 21845
14765; PWR5-NEXT:    rotldi 8, 4, 63
14766; PWR5-NEXT:    rotldi 9, 3, 63
14767; PWR5-NEXT:    rldimi 5, 5, 32, 0
14768; PWR5-NEXT:    and 8, 8, 5
14769; PWR5-NEXT:    and 5, 9, 5
14770; PWR5-NEXT:    ori 6, 6, 13107
14771; PWR5-NEXT:    sub 3, 3, 5
14772; PWR5-NEXT:    rldimi 6, 6, 32, 0
14773; PWR5-NEXT:    sub 4, 4, 8
14774; PWR5-NEXT:    and 8, 3, 6
14775; PWR5-NEXT:    rotldi 3, 3, 62
14776; PWR5-NEXT:    and 3, 3, 6
14777; PWR5-NEXT:    lis 7, 3855
14778; PWR5-NEXT:    and 5, 4, 6
14779; PWR5-NEXT:    rotldi 4, 4, 62
14780; PWR5-NEXT:    add 3, 8, 3
14781; PWR5-NEXT:    lis 9, 257
14782; PWR5-NEXT:    ori 7, 7, 3855
14783; PWR5-NEXT:    and 4, 4, 6
14784; PWR5-NEXT:    rldicl 6, 3, 60, 4
14785; PWR5-NEXT:    ori 9, 9, 257
14786; PWR5-NEXT:    rldimi 7, 7, 32, 0
14787; PWR5-NEXT:    add 4, 5, 4
14788; PWR5-NEXT:    add 3, 3, 6
14789; PWR5-NEXT:    rldimi 9, 9, 32, 0
14790; PWR5-NEXT:    rldicl 5, 4, 60, 4
14791; PWR5-NEXT:    and 3, 3, 7
14792; PWR5-NEXT:    add 4, 4, 5
14793; PWR5-NEXT:    mulld 3, 3, 9
14794; PWR5-NEXT:    and 4, 4, 7
14795; PWR5-NEXT:    rldicl 3, 3, 8, 56
14796; PWR5-NEXT:    mulld 4, 4, 9
14797; PWR5-NEXT:    li 5, 12
14798; PWR5-NEXT:    subfic 3, 3, 12
14799; PWR5-NEXT:    rldicl 4, 4, 8, 56
14800; PWR5-NEXT:    subfe 3, 5, 5
14801; PWR5-NEXT:    subfic 4, 4, 12
14802; PWR5-NEXT:    subfe 4, 5, 5
14803; PWR5-NEXT:    blr
14804;
14805; PWR6-LABEL: ugt_12_v2i64:
14806; PWR6:       # %bb.0:
14807; PWR6-NEXT:    lis 5, 21845
14808; PWR6-NEXT:    lis 6, 13107
14809; PWR6-NEXT:    ori 5, 5, 21845
14810; PWR6-NEXT:    rotldi 8, 4, 63
14811; PWR6-NEXT:    rotldi 9, 3, 63
14812; PWR6-NEXT:    rldimi 5, 5, 32, 0
14813; PWR6-NEXT:    and 8, 8, 5
14814; PWR6-NEXT:    and 5, 9, 5
14815; PWR6-NEXT:    ori 6, 6, 13107
14816; PWR6-NEXT:    sub 3, 3, 5
14817; PWR6-NEXT:    rldimi 6, 6, 32, 0
14818; PWR6-NEXT:    sub 4, 4, 8
14819; PWR6-NEXT:    and 8, 3, 6
14820; PWR6-NEXT:    rotldi 3, 3, 62
14821; PWR6-NEXT:    and 3, 3, 6
14822; PWR6-NEXT:    lis 7, 3855
14823; PWR6-NEXT:    and 5, 4, 6
14824; PWR6-NEXT:    rotldi 4, 4, 62
14825; PWR6-NEXT:    add 3, 8, 3
14826; PWR6-NEXT:    lis 9, 257
14827; PWR6-NEXT:    ori 7, 7, 3855
14828; PWR6-NEXT:    and 4, 4, 6
14829; PWR6-NEXT:    rldicl 6, 3, 60, 4
14830; PWR6-NEXT:    ori 9, 9, 257
14831; PWR6-NEXT:    rldimi 7, 7, 32, 0
14832; PWR6-NEXT:    add 4, 5, 4
14833; PWR6-NEXT:    add 3, 3, 6
14834; PWR6-NEXT:    rldimi 9, 9, 32, 0
14835; PWR6-NEXT:    rldicl 5, 4, 60, 4
14836; PWR6-NEXT:    and 3, 3, 7
14837; PWR6-NEXT:    add 4, 4, 5
14838; PWR6-NEXT:    mulld 3, 3, 9
14839; PWR6-NEXT:    and 4, 4, 7
14840; PWR6-NEXT:    rldicl 3, 3, 8, 56
14841; PWR6-NEXT:    mulld 4, 4, 9
14842; PWR6-NEXT:    li 5, 12
14843; PWR6-NEXT:    subfic 3, 3, 12
14844; PWR6-NEXT:    rldicl 4, 4, 8, 56
14845; PWR6-NEXT:    subfe 3, 5, 5
14846; PWR6-NEXT:    subfic 4, 4, 12
14847; PWR6-NEXT:    subfe 4, 5, 5
14848; PWR6-NEXT:    blr
14849;
14850; PWR7-LABEL: ugt_12_v2i64:
14851; PWR7:       # %bb.0:
14852; PWR7-NEXT:    addi 3, 1, -32
14853; PWR7-NEXT:    li 5, 0
14854; PWR7-NEXT:    li 6, -1
14855; PWR7-NEXT:    stxvd2x 34, 0, 3
14856; PWR7-NEXT:    ld 3, -24(1)
14857; PWR7-NEXT:    ld 4, -32(1)
14858; PWR7-NEXT:    popcntd 3, 3
14859; PWR7-NEXT:    popcntd 4, 4
14860; PWR7-NEXT:    cmpldi 3, 12
14861; PWR7-NEXT:    iselgt 3, 6, 5
14862; PWR7-NEXT:    cmpldi 4, 12
14863; PWR7-NEXT:    iselgt 4, 6, 5
14864; PWR7-NEXT:    std 3, -8(1)
14865; PWR7-NEXT:    addi 3, 1, -16
14866; PWR7-NEXT:    std 4, -16(1)
14867; PWR7-NEXT:    lxvd2x 34, 0, 3
14868; PWR7-NEXT:    blr
14869;
14870; PWR8-LABEL: ugt_12_v2i64:
14871; PWR8:       # %bb.0:
14872; PWR8-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
14873; PWR8-NEXT:    vpopcntd 2, 2
14874; PWR8-NEXT:    addi 3, 3, .LCPI122_0@toc@l
14875; PWR8-NEXT:    lxvd2x 35, 0, 3
14876; PWR8-NEXT:    vcmpgtud 2, 2, 3
14877; PWR8-NEXT:    blr
14878;
14879; PWR9-LABEL: ugt_12_v2i64:
14880; PWR9:       # %bb.0:
14881; PWR9-NEXT:    addis 3, 2, .LCPI122_0@toc@ha
14882; PWR9-NEXT:    vpopcntd 2, 2
14883; PWR9-NEXT:    addi 3, 3, .LCPI122_0@toc@l
14884; PWR9-NEXT:    lxvx 35, 0, 3
14885; PWR9-NEXT:    vcmpgtud 2, 2, 3
14886; PWR9-NEXT:    blr
14887  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
14888  %3 = icmp ugt <2 x i64> %2, <i64 12, i64 12>
14889  %4 = sext <2 x i1> %3 to <2 x i64>
14890  ret <2 x i64> %4
14891}
14892
14893define <2 x i64> @ult_13_v2i64(<2 x i64> %0) {
14894; PWR5-LABEL: ult_13_v2i64:
14895; PWR5:       # %bb.0:
14896; PWR5-NEXT:    lis 5, 21845
14897; PWR5-NEXT:    lis 6, 13107
14898; PWR5-NEXT:    ori 5, 5, 21845
14899; PWR5-NEXT:    rotldi 8, 4, 63
14900; PWR5-NEXT:    rotldi 9, 3, 63
14901; PWR5-NEXT:    rldimi 5, 5, 32, 0
14902; PWR5-NEXT:    and 8, 8, 5
14903; PWR5-NEXT:    and 5, 9, 5
14904; PWR5-NEXT:    ori 6, 6, 13107
14905; PWR5-NEXT:    sub 3, 3, 5
14906; PWR5-NEXT:    rldimi 6, 6, 32, 0
14907; PWR5-NEXT:    sub 4, 4, 8
14908; PWR5-NEXT:    and 8, 3, 6
14909; PWR5-NEXT:    rotldi 3, 3, 62
14910; PWR5-NEXT:    and 3, 3, 6
14911; PWR5-NEXT:    lis 7, 3855
14912; PWR5-NEXT:    and 5, 4, 6
14913; PWR5-NEXT:    rotldi 4, 4, 62
14914; PWR5-NEXT:    add 3, 8, 3
14915; PWR5-NEXT:    lis 9, 257
14916; PWR5-NEXT:    ori 7, 7, 3855
14917; PWR5-NEXT:    and 4, 4, 6
14918; PWR5-NEXT:    rldicl 6, 3, 60, 4
14919; PWR5-NEXT:    ori 9, 9, 257
14920; PWR5-NEXT:    rldimi 7, 7, 32, 0
14921; PWR5-NEXT:    add 4, 5, 4
14922; PWR5-NEXT:    add 3, 3, 6
14923; PWR5-NEXT:    rldimi 9, 9, 32, 0
14924; PWR5-NEXT:    rldicl 5, 4, 60, 4
14925; PWR5-NEXT:    and 3, 3, 7
14926; PWR5-NEXT:    add 4, 4, 5
14927; PWR5-NEXT:    mulld 3, 3, 9
14928; PWR5-NEXT:    and 4, 4, 7
14929; PWR5-NEXT:    rldicl 3, 3, 8, 56
14930; PWR5-NEXT:    li 5, 13
14931; PWR5-NEXT:    mulld 4, 4, 9
14932; PWR5-NEXT:    subc 6, 3, 5
14933; PWR5-NEXT:    rldicl 4, 4, 8, 56
14934; PWR5-NEXT:    subfe 3, 3, 3
14935; PWR5-NEXT:    subc 5, 4, 5
14936; PWR5-NEXT:    subfe 4, 4, 4
14937; PWR5-NEXT:    blr
14938;
14939; PWR6-LABEL: ult_13_v2i64:
14940; PWR6:       # %bb.0:
14941; PWR6-NEXT:    lis 5, 21845
14942; PWR6-NEXT:    lis 6, 13107
14943; PWR6-NEXT:    ori 5, 5, 21845
14944; PWR6-NEXT:    rotldi 8, 4, 63
14945; PWR6-NEXT:    rotldi 9, 3, 63
14946; PWR6-NEXT:    rldimi 5, 5, 32, 0
14947; PWR6-NEXT:    and 8, 8, 5
14948; PWR6-NEXT:    and 5, 9, 5
14949; PWR6-NEXT:    ori 6, 6, 13107
14950; PWR6-NEXT:    sub 3, 3, 5
14951; PWR6-NEXT:    rldimi 6, 6, 32, 0
14952; PWR6-NEXT:    sub 4, 4, 8
14953; PWR6-NEXT:    and 8, 3, 6
14954; PWR6-NEXT:    rotldi 3, 3, 62
14955; PWR6-NEXT:    and 3, 3, 6
14956; PWR6-NEXT:    lis 7, 3855
14957; PWR6-NEXT:    and 5, 4, 6
14958; PWR6-NEXT:    rotldi 4, 4, 62
14959; PWR6-NEXT:    add 3, 8, 3
14960; PWR6-NEXT:    lis 9, 257
14961; PWR6-NEXT:    ori 7, 7, 3855
14962; PWR6-NEXT:    and 4, 4, 6
14963; PWR6-NEXT:    rldicl 6, 3, 60, 4
14964; PWR6-NEXT:    ori 9, 9, 257
14965; PWR6-NEXT:    rldimi 7, 7, 32, 0
14966; PWR6-NEXT:    add 4, 5, 4
14967; PWR6-NEXT:    add 3, 3, 6
14968; PWR6-NEXT:    rldimi 9, 9, 32, 0
14969; PWR6-NEXT:    rldicl 5, 4, 60, 4
14970; PWR6-NEXT:    and 3, 3, 7
14971; PWR6-NEXT:    add 4, 4, 5
14972; PWR6-NEXT:    mulld 3, 3, 9
14973; PWR6-NEXT:    and 4, 4, 7
14974; PWR6-NEXT:    rldicl 3, 3, 8, 56
14975; PWR6-NEXT:    li 5, 13
14976; PWR6-NEXT:    mulld 4, 4, 9
14977; PWR6-NEXT:    subc 6, 3, 5
14978; PWR6-NEXT:    rldicl 4, 4, 8, 56
14979; PWR6-NEXT:    subfe 3, 3, 3
14980; PWR6-NEXT:    subc 5, 4, 5
14981; PWR6-NEXT:    subfe 4, 4, 4
14982; PWR6-NEXT:    blr
14983;
14984; PWR7-LABEL: ult_13_v2i64:
14985; PWR7:       # %bb.0:
14986; PWR7-NEXT:    addi 3, 1, -32
14987; PWR7-NEXT:    li 5, 0
14988; PWR7-NEXT:    li 6, -1
14989; PWR7-NEXT:    stxvd2x 34, 0, 3
14990; PWR7-NEXT:    ld 3, -24(1)
14991; PWR7-NEXT:    ld 4, -32(1)
14992; PWR7-NEXT:    popcntd 3, 3
14993; PWR7-NEXT:    popcntd 4, 4
14994; PWR7-NEXT:    cmpldi 3, 13
14995; PWR7-NEXT:    isellt 3, 6, 5
14996; PWR7-NEXT:    cmpldi 4, 13
14997; PWR7-NEXT:    isellt 4, 6, 5
14998; PWR7-NEXT:    std 3, -8(1)
14999; PWR7-NEXT:    addi 3, 1, -16
15000; PWR7-NEXT:    std 4, -16(1)
15001; PWR7-NEXT:    lxvd2x 34, 0, 3
15002; PWR7-NEXT:    blr
15003;
15004; PWR8-LABEL: ult_13_v2i64:
15005; PWR8:       # %bb.0:
15006; PWR8-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
15007; PWR8-NEXT:    vpopcntd 2, 2
15008; PWR8-NEXT:    addi 3, 3, .LCPI123_0@toc@l
15009; PWR8-NEXT:    lxvd2x 35, 0, 3
15010; PWR8-NEXT:    vcmpgtud 2, 3, 2
15011; PWR8-NEXT:    blr
15012;
15013; PWR9-LABEL: ult_13_v2i64:
15014; PWR9:       # %bb.0:
15015; PWR9-NEXT:    addis 3, 2, .LCPI123_0@toc@ha
15016; PWR9-NEXT:    vpopcntd 2, 2
15017; PWR9-NEXT:    addi 3, 3, .LCPI123_0@toc@l
15018; PWR9-NEXT:    lxvx 35, 0, 3
15019; PWR9-NEXT:    vcmpgtud 2, 3, 2
15020; PWR9-NEXT:    blr
15021  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15022  %3 = icmp ult <2 x i64> %2, <i64 13, i64 13>
15023  %4 = sext <2 x i1> %3 to <2 x i64>
15024  ret <2 x i64> %4
15025}
15026
15027define <2 x i64> @ugt_13_v2i64(<2 x i64> %0) {
15028; PWR5-LABEL: ugt_13_v2i64:
15029; PWR5:       # %bb.0:
15030; PWR5-NEXT:    lis 5, 21845
15031; PWR5-NEXT:    lis 6, 13107
15032; PWR5-NEXT:    ori 5, 5, 21845
15033; PWR5-NEXT:    rotldi 8, 4, 63
15034; PWR5-NEXT:    rotldi 9, 3, 63
15035; PWR5-NEXT:    rldimi 5, 5, 32, 0
15036; PWR5-NEXT:    and 8, 8, 5
15037; PWR5-NEXT:    and 5, 9, 5
15038; PWR5-NEXT:    ori 6, 6, 13107
15039; PWR5-NEXT:    sub 3, 3, 5
15040; PWR5-NEXT:    rldimi 6, 6, 32, 0
15041; PWR5-NEXT:    sub 4, 4, 8
15042; PWR5-NEXT:    and 8, 3, 6
15043; PWR5-NEXT:    rotldi 3, 3, 62
15044; PWR5-NEXT:    and 3, 3, 6
15045; PWR5-NEXT:    lis 7, 3855
15046; PWR5-NEXT:    and 5, 4, 6
15047; PWR5-NEXT:    rotldi 4, 4, 62
15048; PWR5-NEXT:    add 3, 8, 3
15049; PWR5-NEXT:    lis 9, 257
15050; PWR5-NEXT:    ori 7, 7, 3855
15051; PWR5-NEXT:    and 4, 4, 6
15052; PWR5-NEXT:    rldicl 6, 3, 60, 4
15053; PWR5-NEXT:    ori 9, 9, 257
15054; PWR5-NEXT:    rldimi 7, 7, 32, 0
15055; PWR5-NEXT:    add 4, 5, 4
15056; PWR5-NEXT:    add 3, 3, 6
15057; PWR5-NEXT:    rldimi 9, 9, 32, 0
15058; PWR5-NEXT:    rldicl 5, 4, 60, 4
15059; PWR5-NEXT:    and 3, 3, 7
15060; PWR5-NEXT:    add 4, 4, 5
15061; PWR5-NEXT:    mulld 3, 3, 9
15062; PWR5-NEXT:    and 4, 4, 7
15063; PWR5-NEXT:    rldicl 3, 3, 8, 56
15064; PWR5-NEXT:    mulld 4, 4, 9
15065; PWR5-NEXT:    li 5, 13
15066; PWR5-NEXT:    subfic 3, 3, 13
15067; PWR5-NEXT:    rldicl 4, 4, 8, 56
15068; PWR5-NEXT:    subfe 3, 5, 5
15069; PWR5-NEXT:    subfic 4, 4, 13
15070; PWR5-NEXT:    subfe 4, 5, 5
15071; PWR5-NEXT:    blr
15072;
15073; PWR6-LABEL: ugt_13_v2i64:
15074; PWR6:       # %bb.0:
15075; PWR6-NEXT:    lis 5, 21845
15076; PWR6-NEXT:    lis 6, 13107
15077; PWR6-NEXT:    ori 5, 5, 21845
15078; PWR6-NEXT:    rotldi 8, 4, 63
15079; PWR6-NEXT:    rotldi 9, 3, 63
15080; PWR6-NEXT:    rldimi 5, 5, 32, 0
15081; PWR6-NEXT:    and 8, 8, 5
15082; PWR6-NEXT:    and 5, 9, 5
15083; PWR6-NEXT:    ori 6, 6, 13107
15084; PWR6-NEXT:    sub 3, 3, 5
15085; PWR6-NEXT:    rldimi 6, 6, 32, 0
15086; PWR6-NEXT:    sub 4, 4, 8
15087; PWR6-NEXT:    and 8, 3, 6
15088; PWR6-NEXT:    rotldi 3, 3, 62
15089; PWR6-NEXT:    and 3, 3, 6
15090; PWR6-NEXT:    lis 7, 3855
15091; PWR6-NEXT:    and 5, 4, 6
15092; PWR6-NEXT:    rotldi 4, 4, 62
15093; PWR6-NEXT:    add 3, 8, 3
15094; PWR6-NEXT:    lis 9, 257
15095; PWR6-NEXT:    ori 7, 7, 3855
15096; PWR6-NEXT:    and 4, 4, 6
15097; PWR6-NEXT:    rldicl 6, 3, 60, 4
15098; PWR6-NEXT:    ori 9, 9, 257
15099; PWR6-NEXT:    rldimi 7, 7, 32, 0
15100; PWR6-NEXT:    add 4, 5, 4
15101; PWR6-NEXT:    add 3, 3, 6
15102; PWR6-NEXT:    rldimi 9, 9, 32, 0
15103; PWR6-NEXT:    rldicl 5, 4, 60, 4
15104; PWR6-NEXT:    and 3, 3, 7
15105; PWR6-NEXT:    add 4, 4, 5
15106; PWR6-NEXT:    mulld 3, 3, 9
15107; PWR6-NEXT:    and 4, 4, 7
15108; PWR6-NEXT:    rldicl 3, 3, 8, 56
15109; PWR6-NEXT:    mulld 4, 4, 9
15110; PWR6-NEXT:    li 5, 13
15111; PWR6-NEXT:    subfic 3, 3, 13
15112; PWR6-NEXT:    rldicl 4, 4, 8, 56
15113; PWR6-NEXT:    subfe 3, 5, 5
15114; PWR6-NEXT:    subfic 4, 4, 13
15115; PWR6-NEXT:    subfe 4, 5, 5
15116; PWR6-NEXT:    blr
15117;
15118; PWR7-LABEL: ugt_13_v2i64:
15119; PWR7:       # %bb.0:
15120; PWR7-NEXT:    addi 3, 1, -32
15121; PWR7-NEXT:    li 5, 0
15122; PWR7-NEXT:    li 6, -1
15123; PWR7-NEXT:    stxvd2x 34, 0, 3
15124; PWR7-NEXT:    ld 3, -24(1)
15125; PWR7-NEXT:    ld 4, -32(1)
15126; PWR7-NEXT:    popcntd 3, 3
15127; PWR7-NEXT:    popcntd 4, 4
15128; PWR7-NEXT:    cmpldi 3, 13
15129; PWR7-NEXT:    iselgt 3, 6, 5
15130; PWR7-NEXT:    cmpldi 4, 13
15131; PWR7-NEXT:    iselgt 4, 6, 5
15132; PWR7-NEXT:    std 3, -8(1)
15133; PWR7-NEXT:    addi 3, 1, -16
15134; PWR7-NEXT:    std 4, -16(1)
15135; PWR7-NEXT:    lxvd2x 34, 0, 3
15136; PWR7-NEXT:    blr
15137;
15138; PWR8-LABEL: ugt_13_v2i64:
15139; PWR8:       # %bb.0:
15140; PWR8-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
15141; PWR8-NEXT:    vpopcntd 2, 2
15142; PWR8-NEXT:    addi 3, 3, .LCPI124_0@toc@l
15143; PWR8-NEXT:    lxvd2x 35, 0, 3
15144; PWR8-NEXT:    vcmpgtud 2, 2, 3
15145; PWR8-NEXT:    blr
15146;
15147; PWR9-LABEL: ugt_13_v2i64:
15148; PWR9:       # %bb.0:
15149; PWR9-NEXT:    addis 3, 2, .LCPI124_0@toc@ha
15150; PWR9-NEXT:    vpopcntd 2, 2
15151; PWR9-NEXT:    addi 3, 3, .LCPI124_0@toc@l
15152; PWR9-NEXT:    lxvx 35, 0, 3
15153; PWR9-NEXT:    vcmpgtud 2, 2, 3
15154; PWR9-NEXT:    blr
15155  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15156  %3 = icmp ugt <2 x i64> %2, <i64 13, i64 13>
15157  %4 = sext <2 x i1> %3 to <2 x i64>
15158  ret <2 x i64> %4
15159}
15160
15161define <2 x i64> @ult_14_v2i64(<2 x i64> %0) {
15162; PWR5-LABEL: ult_14_v2i64:
15163; PWR5:       # %bb.0:
15164; PWR5-NEXT:    lis 5, 21845
15165; PWR5-NEXT:    lis 6, 13107
15166; PWR5-NEXT:    ori 5, 5, 21845
15167; PWR5-NEXT:    rotldi 8, 4, 63
15168; PWR5-NEXT:    rotldi 9, 3, 63
15169; PWR5-NEXT:    rldimi 5, 5, 32, 0
15170; PWR5-NEXT:    and 8, 8, 5
15171; PWR5-NEXT:    and 5, 9, 5
15172; PWR5-NEXT:    ori 6, 6, 13107
15173; PWR5-NEXT:    sub 3, 3, 5
15174; PWR5-NEXT:    rldimi 6, 6, 32, 0
15175; PWR5-NEXT:    sub 4, 4, 8
15176; PWR5-NEXT:    and 8, 3, 6
15177; PWR5-NEXT:    rotldi 3, 3, 62
15178; PWR5-NEXT:    and 3, 3, 6
15179; PWR5-NEXT:    lis 7, 3855
15180; PWR5-NEXT:    and 5, 4, 6
15181; PWR5-NEXT:    rotldi 4, 4, 62
15182; PWR5-NEXT:    add 3, 8, 3
15183; PWR5-NEXT:    lis 9, 257
15184; PWR5-NEXT:    ori 7, 7, 3855
15185; PWR5-NEXT:    and 4, 4, 6
15186; PWR5-NEXT:    rldicl 6, 3, 60, 4
15187; PWR5-NEXT:    ori 9, 9, 257
15188; PWR5-NEXT:    rldimi 7, 7, 32, 0
15189; PWR5-NEXT:    add 4, 5, 4
15190; PWR5-NEXT:    add 3, 3, 6
15191; PWR5-NEXT:    rldimi 9, 9, 32, 0
15192; PWR5-NEXT:    rldicl 5, 4, 60, 4
15193; PWR5-NEXT:    and 3, 3, 7
15194; PWR5-NEXT:    add 4, 4, 5
15195; PWR5-NEXT:    mulld 3, 3, 9
15196; PWR5-NEXT:    and 4, 4, 7
15197; PWR5-NEXT:    rldicl 3, 3, 8, 56
15198; PWR5-NEXT:    li 5, 14
15199; PWR5-NEXT:    mulld 4, 4, 9
15200; PWR5-NEXT:    subc 6, 3, 5
15201; PWR5-NEXT:    rldicl 4, 4, 8, 56
15202; PWR5-NEXT:    subfe 3, 3, 3
15203; PWR5-NEXT:    subc 5, 4, 5
15204; PWR5-NEXT:    subfe 4, 4, 4
15205; PWR5-NEXT:    blr
15206;
15207; PWR6-LABEL: ult_14_v2i64:
15208; PWR6:       # %bb.0:
15209; PWR6-NEXT:    lis 5, 21845
15210; PWR6-NEXT:    lis 6, 13107
15211; PWR6-NEXT:    ori 5, 5, 21845
15212; PWR6-NEXT:    rotldi 8, 4, 63
15213; PWR6-NEXT:    rotldi 9, 3, 63
15214; PWR6-NEXT:    rldimi 5, 5, 32, 0
15215; PWR6-NEXT:    and 8, 8, 5
15216; PWR6-NEXT:    and 5, 9, 5
15217; PWR6-NEXT:    ori 6, 6, 13107
15218; PWR6-NEXT:    sub 3, 3, 5
15219; PWR6-NEXT:    rldimi 6, 6, 32, 0
15220; PWR6-NEXT:    sub 4, 4, 8
15221; PWR6-NEXT:    and 8, 3, 6
15222; PWR6-NEXT:    rotldi 3, 3, 62
15223; PWR6-NEXT:    and 3, 3, 6
15224; PWR6-NEXT:    lis 7, 3855
15225; PWR6-NEXT:    and 5, 4, 6
15226; PWR6-NEXT:    rotldi 4, 4, 62
15227; PWR6-NEXT:    add 3, 8, 3
15228; PWR6-NEXT:    lis 9, 257
15229; PWR6-NEXT:    ori 7, 7, 3855
15230; PWR6-NEXT:    and 4, 4, 6
15231; PWR6-NEXT:    rldicl 6, 3, 60, 4
15232; PWR6-NEXT:    ori 9, 9, 257
15233; PWR6-NEXT:    rldimi 7, 7, 32, 0
15234; PWR6-NEXT:    add 4, 5, 4
15235; PWR6-NEXT:    add 3, 3, 6
15236; PWR6-NEXT:    rldimi 9, 9, 32, 0
15237; PWR6-NEXT:    rldicl 5, 4, 60, 4
15238; PWR6-NEXT:    and 3, 3, 7
15239; PWR6-NEXT:    add 4, 4, 5
15240; PWR6-NEXT:    mulld 3, 3, 9
15241; PWR6-NEXT:    and 4, 4, 7
15242; PWR6-NEXT:    rldicl 3, 3, 8, 56
15243; PWR6-NEXT:    li 5, 14
15244; PWR6-NEXT:    mulld 4, 4, 9
15245; PWR6-NEXT:    subc 6, 3, 5
15246; PWR6-NEXT:    rldicl 4, 4, 8, 56
15247; PWR6-NEXT:    subfe 3, 3, 3
15248; PWR6-NEXT:    subc 5, 4, 5
15249; PWR6-NEXT:    subfe 4, 4, 4
15250; PWR6-NEXT:    blr
15251;
15252; PWR7-LABEL: ult_14_v2i64:
15253; PWR7:       # %bb.0:
15254; PWR7-NEXT:    addi 3, 1, -32
15255; PWR7-NEXT:    li 5, 0
15256; PWR7-NEXT:    li 6, -1
15257; PWR7-NEXT:    stxvd2x 34, 0, 3
15258; PWR7-NEXT:    ld 3, -24(1)
15259; PWR7-NEXT:    ld 4, -32(1)
15260; PWR7-NEXT:    popcntd 3, 3
15261; PWR7-NEXT:    popcntd 4, 4
15262; PWR7-NEXT:    cmpldi 3, 14
15263; PWR7-NEXT:    isellt 3, 6, 5
15264; PWR7-NEXT:    cmpldi 4, 14
15265; PWR7-NEXT:    isellt 4, 6, 5
15266; PWR7-NEXT:    std 3, -8(1)
15267; PWR7-NEXT:    addi 3, 1, -16
15268; PWR7-NEXT:    std 4, -16(1)
15269; PWR7-NEXT:    lxvd2x 34, 0, 3
15270; PWR7-NEXT:    blr
15271;
15272; PWR8-LABEL: ult_14_v2i64:
15273; PWR8:       # %bb.0:
15274; PWR8-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
15275; PWR8-NEXT:    vpopcntd 2, 2
15276; PWR8-NEXT:    addi 3, 3, .LCPI125_0@toc@l
15277; PWR8-NEXT:    lxvd2x 35, 0, 3
15278; PWR8-NEXT:    vcmpgtud 2, 3, 2
15279; PWR8-NEXT:    blr
15280;
15281; PWR9-LABEL: ult_14_v2i64:
15282; PWR9:       # %bb.0:
15283; PWR9-NEXT:    addis 3, 2, .LCPI125_0@toc@ha
15284; PWR9-NEXT:    vpopcntd 2, 2
15285; PWR9-NEXT:    addi 3, 3, .LCPI125_0@toc@l
15286; PWR9-NEXT:    lxvx 35, 0, 3
15287; PWR9-NEXT:    vcmpgtud 2, 3, 2
15288; PWR9-NEXT:    blr
15289  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15290  %3 = icmp ult <2 x i64> %2, <i64 14, i64 14>
15291  %4 = sext <2 x i1> %3 to <2 x i64>
15292  ret <2 x i64> %4
15293}
15294
15295define <2 x i64> @ugt_14_v2i64(<2 x i64> %0) {
15296; PWR5-LABEL: ugt_14_v2i64:
15297; PWR5:       # %bb.0:
15298; PWR5-NEXT:    lis 5, 21845
15299; PWR5-NEXT:    lis 6, 13107
15300; PWR5-NEXT:    ori 5, 5, 21845
15301; PWR5-NEXT:    rotldi 8, 4, 63
15302; PWR5-NEXT:    rotldi 9, 3, 63
15303; PWR5-NEXT:    rldimi 5, 5, 32, 0
15304; PWR5-NEXT:    and 8, 8, 5
15305; PWR5-NEXT:    and 5, 9, 5
15306; PWR5-NEXT:    ori 6, 6, 13107
15307; PWR5-NEXT:    sub 3, 3, 5
15308; PWR5-NEXT:    rldimi 6, 6, 32, 0
15309; PWR5-NEXT:    sub 4, 4, 8
15310; PWR5-NEXT:    and 8, 3, 6
15311; PWR5-NEXT:    rotldi 3, 3, 62
15312; PWR5-NEXT:    and 3, 3, 6
15313; PWR5-NEXT:    lis 7, 3855
15314; PWR5-NEXT:    and 5, 4, 6
15315; PWR5-NEXT:    rotldi 4, 4, 62
15316; PWR5-NEXT:    add 3, 8, 3
15317; PWR5-NEXT:    lis 9, 257
15318; PWR5-NEXT:    ori 7, 7, 3855
15319; PWR5-NEXT:    and 4, 4, 6
15320; PWR5-NEXT:    rldicl 6, 3, 60, 4
15321; PWR5-NEXT:    ori 9, 9, 257
15322; PWR5-NEXT:    rldimi 7, 7, 32, 0
15323; PWR5-NEXT:    add 4, 5, 4
15324; PWR5-NEXT:    add 3, 3, 6
15325; PWR5-NEXT:    rldimi 9, 9, 32, 0
15326; PWR5-NEXT:    rldicl 5, 4, 60, 4
15327; PWR5-NEXT:    and 3, 3, 7
15328; PWR5-NEXT:    add 4, 4, 5
15329; PWR5-NEXT:    mulld 3, 3, 9
15330; PWR5-NEXT:    and 4, 4, 7
15331; PWR5-NEXT:    rldicl 3, 3, 8, 56
15332; PWR5-NEXT:    mulld 4, 4, 9
15333; PWR5-NEXT:    li 5, 14
15334; PWR5-NEXT:    subfic 3, 3, 14
15335; PWR5-NEXT:    rldicl 4, 4, 8, 56
15336; PWR5-NEXT:    subfe 3, 5, 5
15337; PWR5-NEXT:    subfic 4, 4, 14
15338; PWR5-NEXT:    subfe 4, 5, 5
15339; PWR5-NEXT:    blr
15340;
15341; PWR6-LABEL: ugt_14_v2i64:
15342; PWR6:       # %bb.0:
15343; PWR6-NEXT:    lis 5, 21845
15344; PWR6-NEXT:    lis 6, 13107
15345; PWR6-NEXT:    ori 5, 5, 21845
15346; PWR6-NEXT:    rotldi 8, 4, 63
15347; PWR6-NEXT:    rotldi 9, 3, 63
15348; PWR6-NEXT:    rldimi 5, 5, 32, 0
15349; PWR6-NEXT:    and 8, 8, 5
15350; PWR6-NEXT:    and 5, 9, 5
15351; PWR6-NEXT:    ori 6, 6, 13107
15352; PWR6-NEXT:    sub 3, 3, 5
15353; PWR6-NEXT:    rldimi 6, 6, 32, 0
15354; PWR6-NEXT:    sub 4, 4, 8
15355; PWR6-NEXT:    and 8, 3, 6
15356; PWR6-NEXT:    rotldi 3, 3, 62
15357; PWR6-NEXT:    and 3, 3, 6
15358; PWR6-NEXT:    lis 7, 3855
15359; PWR6-NEXT:    and 5, 4, 6
15360; PWR6-NEXT:    rotldi 4, 4, 62
15361; PWR6-NEXT:    add 3, 8, 3
15362; PWR6-NEXT:    lis 9, 257
15363; PWR6-NEXT:    ori 7, 7, 3855
15364; PWR6-NEXT:    and 4, 4, 6
15365; PWR6-NEXT:    rldicl 6, 3, 60, 4
15366; PWR6-NEXT:    ori 9, 9, 257
15367; PWR6-NEXT:    rldimi 7, 7, 32, 0
15368; PWR6-NEXT:    add 4, 5, 4
15369; PWR6-NEXT:    add 3, 3, 6
15370; PWR6-NEXT:    rldimi 9, 9, 32, 0
15371; PWR6-NEXT:    rldicl 5, 4, 60, 4
15372; PWR6-NEXT:    and 3, 3, 7
15373; PWR6-NEXT:    add 4, 4, 5
15374; PWR6-NEXT:    mulld 3, 3, 9
15375; PWR6-NEXT:    and 4, 4, 7
15376; PWR6-NEXT:    rldicl 3, 3, 8, 56
15377; PWR6-NEXT:    mulld 4, 4, 9
15378; PWR6-NEXT:    li 5, 14
15379; PWR6-NEXT:    subfic 3, 3, 14
15380; PWR6-NEXT:    rldicl 4, 4, 8, 56
15381; PWR6-NEXT:    subfe 3, 5, 5
15382; PWR6-NEXT:    subfic 4, 4, 14
15383; PWR6-NEXT:    subfe 4, 5, 5
15384; PWR6-NEXT:    blr
15385;
15386; PWR7-LABEL: ugt_14_v2i64:
15387; PWR7:       # %bb.0:
15388; PWR7-NEXT:    addi 3, 1, -32
15389; PWR7-NEXT:    li 5, 0
15390; PWR7-NEXT:    li 6, -1
15391; PWR7-NEXT:    stxvd2x 34, 0, 3
15392; PWR7-NEXT:    ld 3, -24(1)
15393; PWR7-NEXT:    ld 4, -32(1)
15394; PWR7-NEXT:    popcntd 3, 3
15395; PWR7-NEXT:    popcntd 4, 4
15396; PWR7-NEXT:    cmpldi 3, 14
15397; PWR7-NEXT:    iselgt 3, 6, 5
15398; PWR7-NEXT:    cmpldi 4, 14
15399; PWR7-NEXT:    iselgt 4, 6, 5
15400; PWR7-NEXT:    std 3, -8(1)
15401; PWR7-NEXT:    addi 3, 1, -16
15402; PWR7-NEXT:    std 4, -16(1)
15403; PWR7-NEXT:    lxvd2x 34, 0, 3
15404; PWR7-NEXT:    blr
15405;
15406; PWR8-LABEL: ugt_14_v2i64:
15407; PWR8:       # %bb.0:
15408; PWR8-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
15409; PWR8-NEXT:    vpopcntd 2, 2
15410; PWR8-NEXT:    addi 3, 3, .LCPI126_0@toc@l
15411; PWR8-NEXT:    lxvd2x 35, 0, 3
15412; PWR8-NEXT:    vcmpgtud 2, 2, 3
15413; PWR8-NEXT:    blr
15414;
15415; PWR9-LABEL: ugt_14_v2i64:
15416; PWR9:       # %bb.0:
15417; PWR9-NEXT:    addis 3, 2, .LCPI126_0@toc@ha
15418; PWR9-NEXT:    vpopcntd 2, 2
15419; PWR9-NEXT:    addi 3, 3, .LCPI126_0@toc@l
15420; PWR9-NEXT:    lxvx 35, 0, 3
15421; PWR9-NEXT:    vcmpgtud 2, 2, 3
15422; PWR9-NEXT:    blr
15423  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15424  %3 = icmp ugt <2 x i64> %2, <i64 14, i64 14>
15425  %4 = sext <2 x i1> %3 to <2 x i64>
15426  ret <2 x i64> %4
15427}
15428
15429define <2 x i64> @ult_15_v2i64(<2 x i64> %0) {
15430; PWR5-LABEL: ult_15_v2i64:
15431; PWR5:       # %bb.0:
15432; PWR5-NEXT:    lis 5, 21845
15433; PWR5-NEXT:    lis 6, 13107
15434; PWR5-NEXT:    ori 5, 5, 21845
15435; PWR5-NEXT:    rotldi 8, 4, 63
15436; PWR5-NEXT:    rotldi 9, 3, 63
15437; PWR5-NEXT:    rldimi 5, 5, 32, 0
15438; PWR5-NEXT:    and 8, 8, 5
15439; PWR5-NEXT:    and 5, 9, 5
15440; PWR5-NEXT:    ori 6, 6, 13107
15441; PWR5-NEXT:    sub 3, 3, 5
15442; PWR5-NEXT:    rldimi 6, 6, 32, 0
15443; PWR5-NEXT:    sub 4, 4, 8
15444; PWR5-NEXT:    and 8, 3, 6
15445; PWR5-NEXT:    rotldi 3, 3, 62
15446; PWR5-NEXT:    and 3, 3, 6
15447; PWR5-NEXT:    lis 7, 3855
15448; PWR5-NEXT:    and 5, 4, 6
15449; PWR5-NEXT:    rotldi 4, 4, 62
15450; PWR5-NEXT:    add 3, 8, 3
15451; PWR5-NEXT:    lis 9, 257
15452; PWR5-NEXT:    ori 7, 7, 3855
15453; PWR5-NEXT:    and 4, 4, 6
15454; PWR5-NEXT:    rldicl 6, 3, 60, 4
15455; PWR5-NEXT:    ori 9, 9, 257
15456; PWR5-NEXT:    rldimi 7, 7, 32, 0
15457; PWR5-NEXT:    add 4, 5, 4
15458; PWR5-NEXT:    add 3, 3, 6
15459; PWR5-NEXT:    rldimi 9, 9, 32, 0
15460; PWR5-NEXT:    rldicl 5, 4, 60, 4
15461; PWR5-NEXT:    and 3, 3, 7
15462; PWR5-NEXT:    add 4, 4, 5
15463; PWR5-NEXT:    mulld 3, 3, 9
15464; PWR5-NEXT:    and 4, 4, 7
15465; PWR5-NEXT:    rldicl 3, 3, 8, 56
15466; PWR5-NEXT:    li 5, 15
15467; PWR5-NEXT:    mulld 4, 4, 9
15468; PWR5-NEXT:    subc 6, 3, 5
15469; PWR5-NEXT:    rldicl 4, 4, 8, 56
15470; PWR5-NEXT:    subfe 3, 3, 3
15471; PWR5-NEXT:    subc 5, 4, 5
15472; PWR5-NEXT:    subfe 4, 4, 4
15473; PWR5-NEXT:    blr
15474;
15475; PWR6-LABEL: ult_15_v2i64:
15476; PWR6:       # %bb.0:
15477; PWR6-NEXT:    lis 5, 21845
15478; PWR6-NEXT:    lis 6, 13107
15479; PWR6-NEXT:    ori 5, 5, 21845
15480; PWR6-NEXT:    rotldi 8, 4, 63
15481; PWR6-NEXT:    rotldi 9, 3, 63
15482; PWR6-NEXT:    rldimi 5, 5, 32, 0
15483; PWR6-NEXT:    and 8, 8, 5
15484; PWR6-NEXT:    and 5, 9, 5
15485; PWR6-NEXT:    ori 6, 6, 13107
15486; PWR6-NEXT:    sub 3, 3, 5
15487; PWR6-NEXT:    rldimi 6, 6, 32, 0
15488; PWR6-NEXT:    sub 4, 4, 8
15489; PWR6-NEXT:    and 8, 3, 6
15490; PWR6-NEXT:    rotldi 3, 3, 62
15491; PWR6-NEXT:    and 3, 3, 6
15492; PWR6-NEXT:    lis 7, 3855
15493; PWR6-NEXT:    and 5, 4, 6
15494; PWR6-NEXT:    rotldi 4, 4, 62
15495; PWR6-NEXT:    add 3, 8, 3
15496; PWR6-NEXT:    lis 9, 257
15497; PWR6-NEXT:    ori 7, 7, 3855
15498; PWR6-NEXT:    and 4, 4, 6
15499; PWR6-NEXT:    rldicl 6, 3, 60, 4
15500; PWR6-NEXT:    ori 9, 9, 257
15501; PWR6-NEXT:    rldimi 7, 7, 32, 0
15502; PWR6-NEXT:    add 4, 5, 4
15503; PWR6-NEXT:    add 3, 3, 6
15504; PWR6-NEXT:    rldimi 9, 9, 32, 0
15505; PWR6-NEXT:    rldicl 5, 4, 60, 4
15506; PWR6-NEXT:    and 3, 3, 7
15507; PWR6-NEXT:    add 4, 4, 5
15508; PWR6-NEXT:    mulld 3, 3, 9
15509; PWR6-NEXT:    and 4, 4, 7
15510; PWR6-NEXT:    rldicl 3, 3, 8, 56
15511; PWR6-NEXT:    li 5, 15
15512; PWR6-NEXT:    mulld 4, 4, 9
15513; PWR6-NEXT:    subc 6, 3, 5
15514; PWR6-NEXT:    rldicl 4, 4, 8, 56
15515; PWR6-NEXT:    subfe 3, 3, 3
15516; PWR6-NEXT:    subc 5, 4, 5
15517; PWR6-NEXT:    subfe 4, 4, 4
15518; PWR6-NEXT:    blr
15519;
15520; PWR7-LABEL: ult_15_v2i64:
15521; PWR7:       # %bb.0:
15522; PWR7-NEXT:    addi 3, 1, -32
15523; PWR7-NEXT:    li 5, 0
15524; PWR7-NEXT:    li 6, -1
15525; PWR7-NEXT:    stxvd2x 34, 0, 3
15526; PWR7-NEXT:    ld 3, -24(1)
15527; PWR7-NEXT:    ld 4, -32(1)
15528; PWR7-NEXT:    popcntd 3, 3
15529; PWR7-NEXT:    popcntd 4, 4
15530; PWR7-NEXT:    cmpldi 3, 15
15531; PWR7-NEXT:    isellt 3, 6, 5
15532; PWR7-NEXT:    cmpldi 4, 15
15533; PWR7-NEXT:    isellt 4, 6, 5
15534; PWR7-NEXT:    std 3, -8(1)
15535; PWR7-NEXT:    addi 3, 1, -16
15536; PWR7-NEXT:    std 4, -16(1)
15537; PWR7-NEXT:    lxvd2x 34, 0, 3
15538; PWR7-NEXT:    blr
15539;
15540; PWR8-LABEL: ult_15_v2i64:
15541; PWR8:       # %bb.0:
15542; PWR8-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
15543; PWR8-NEXT:    vpopcntd 2, 2
15544; PWR8-NEXT:    addi 3, 3, .LCPI127_0@toc@l
15545; PWR8-NEXT:    lxvd2x 35, 0, 3
15546; PWR8-NEXT:    vcmpgtud 2, 3, 2
15547; PWR8-NEXT:    blr
15548;
15549; PWR9-LABEL: ult_15_v2i64:
15550; PWR9:       # %bb.0:
15551; PWR9-NEXT:    addis 3, 2, .LCPI127_0@toc@ha
15552; PWR9-NEXT:    vpopcntd 2, 2
15553; PWR9-NEXT:    addi 3, 3, .LCPI127_0@toc@l
15554; PWR9-NEXT:    lxvx 35, 0, 3
15555; PWR9-NEXT:    vcmpgtud 2, 3, 2
15556; PWR9-NEXT:    blr
15557  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15558  %3 = icmp ult <2 x i64> %2, <i64 15, i64 15>
15559  %4 = sext <2 x i1> %3 to <2 x i64>
15560  ret <2 x i64> %4
15561}
15562
15563define <2 x i64> @ugt_15_v2i64(<2 x i64> %0) {
15564; PWR5-LABEL: ugt_15_v2i64:
15565; PWR5:       # %bb.0:
15566; PWR5-NEXT:    lis 5, 21845
15567; PWR5-NEXT:    lis 6, 13107
15568; PWR5-NEXT:    ori 5, 5, 21845
15569; PWR5-NEXT:    rotldi 8, 4, 63
15570; PWR5-NEXT:    rotldi 9, 3, 63
15571; PWR5-NEXT:    rldimi 5, 5, 32, 0
15572; PWR5-NEXT:    and 8, 8, 5
15573; PWR5-NEXT:    and 5, 9, 5
15574; PWR5-NEXT:    ori 6, 6, 13107
15575; PWR5-NEXT:    sub 3, 3, 5
15576; PWR5-NEXT:    rldimi 6, 6, 32, 0
15577; PWR5-NEXT:    sub 4, 4, 8
15578; PWR5-NEXT:    and 8, 3, 6
15579; PWR5-NEXT:    rotldi 3, 3, 62
15580; PWR5-NEXT:    and 3, 3, 6
15581; PWR5-NEXT:    lis 7, 3855
15582; PWR5-NEXT:    and 5, 4, 6
15583; PWR5-NEXT:    rotldi 4, 4, 62
15584; PWR5-NEXT:    add 3, 8, 3
15585; PWR5-NEXT:    lis 9, 257
15586; PWR5-NEXT:    ori 7, 7, 3855
15587; PWR5-NEXT:    and 4, 4, 6
15588; PWR5-NEXT:    rldicl 6, 3, 60, 4
15589; PWR5-NEXT:    ori 9, 9, 257
15590; PWR5-NEXT:    rldimi 7, 7, 32, 0
15591; PWR5-NEXT:    add 4, 5, 4
15592; PWR5-NEXT:    add 3, 3, 6
15593; PWR5-NEXT:    rldimi 9, 9, 32, 0
15594; PWR5-NEXT:    rldicl 5, 4, 60, 4
15595; PWR5-NEXT:    and 3, 3, 7
15596; PWR5-NEXT:    add 4, 4, 5
15597; PWR5-NEXT:    mulld 3, 3, 9
15598; PWR5-NEXT:    and 4, 4, 7
15599; PWR5-NEXT:    rldicl 3, 3, 8, 56
15600; PWR5-NEXT:    mulld 4, 4, 9
15601; PWR5-NEXT:    li 5, 15
15602; PWR5-NEXT:    subfic 3, 3, 15
15603; PWR5-NEXT:    rldicl 4, 4, 8, 56
15604; PWR5-NEXT:    subfe 3, 5, 5
15605; PWR5-NEXT:    subfic 4, 4, 15
15606; PWR5-NEXT:    subfe 4, 5, 5
15607; PWR5-NEXT:    blr
15608;
15609; PWR6-LABEL: ugt_15_v2i64:
15610; PWR6:       # %bb.0:
15611; PWR6-NEXT:    lis 5, 21845
15612; PWR6-NEXT:    lis 6, 13107
15613; PWR6-NEXT:    ori 5, 5, 21845
15614; PWR6-NEXT:    rotldi 8, 4, 63
15615; PWR6-NEXT:    rotldi 9, 3, 63
15616; PWR6-NEXT:    rldimi 5, 5, 32, 0
15617; PWR6-NEXT:    and 8, 8, 5
15618; PWR6-NEXT:    and 5, 9, 5
15619; PWR6-NEXT:    ori 6, 6, 13107
15620; PWR6-NEXT:    sub 3, 3, 5
15621; PWR6-NEXT:    rldimi 6, 6, 32, 0
15622; PWR6-NEXT:    sub 4, 4, 8
15623; PWR6-NEXT:    and 8, 3, 6
15624; PWR6-NEXT:    rotldi 3, 3, 62
15625; PWR6-NEXT:    and 3, 3, 6
15626; PWR6-NEXT:    lis 7, 3855
15627; PWR6-NEXT:    and 5, 4, 6
15628; PWR6-NEXT:    rotldi 4, 4, 62
15629; PWR6-NEXT:    add 3, 8, 3
15630; PWR6-NEXT:    lis 9, 257
15631; PWR6-NEXT:    ori 7, 7, 3855
15632; PWR6-NEXT:    and 4, 4, 6
15633; PWR6-NEXT:    rldicl 6, 3, 60, 4
15634; PWR6-NEXT:    ori 9, 9, 257
15635; PWR6-NEXT:    rldimi 7, 7, 32, 0
15636; PWR6-NEXT:    add 4, 5, 4
15637; PWR6-NEXT:    add 3, 3, 6
15638; PWR6-NEXT:    rldimi 9, 9, 32, 0
15639; PWR6-NEXT:    rldicl 5, 4, 60, 4
15640; PWR6-NEXT:    and 3, 3, 7
15641; PWR6-NEXT:    add 4, 4, 5
15642; PWR6-NEXT:    mulld 3, 3, 9
15643; PWR6-NEXT:    and 4, 4, 7
15644; PWR6-NEXT:    rldicl 3, 3, 8, 56
15645; PWR6-NEXT:    mulld 4, 4, 9
15646; PWR6-NEXT:    li 5, 15
15647; PWR6-NEXT:    subfic 3, 3, 15
15648; PWR6-NEXT:    rldicl 4, 4, 8, 56
15649; PWR6-NEXT:    subfe 3, 5, 5
15650; PWR6-NEXT:    subfic 4, 4, 15
15651; PWR6-NEXT:    subfe 4, 5, 5
15652; PWR6-NEXT:    blr
15653;
15654; PWR7-LABEL: ugt_15_v2i64:
15655; PWR7:       # %bb.0:
15656; PWR7-NEXT:    addi 3, 1, -32
15657; PWR7-NEXT:    li 5, 0
15658; PWR7-NEXT:    li 6, -1
15659; PWR7-NEXT:    stxvd2x 34, 0, 3
15660; PWR7-NEXT:    ld 3, -24(1)
15661; PWR7-NEXT:    ld 4, -32(1)
15662; PWR7-NEXT:    popcntd 3, 3
15663; PWR7-NEXT:    popcntd 4, 4
15664; PWR7-NEXT:    cmpldi 3, 15
15665; PWR7-NEXT:    iselgt 3, 6, 5
15666; PWR7-NEXT:    cmpldi 4, 15
15667; PWR7-NEXT:    iselgt 4, 6, 5
15668; PWR7-NEXT:    std 3, -8(1)
15669; PWR7-NEXT:    addi 3, 1, -16
15670; PWR7-NEXT:    std 4, -16(1)
15671; PWR7-NEXT:    lxvd2x 34, 0, 3
15672; PWR7-NEXT:    blr
15673;
15674; PWR8-LABEL: ugt_15_v2i64:
15675; PWR8:       # %bb.0:
15676; PWR8-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
15677; PWR8-NEXT:    vpopcntd 2, 2
15678; PWR8-NEXT:    addi 3, 3, .LCPI128_0@toc@l
15679; PWR8-NEXT:    lxvd2x 35, 0, 3
15680; PWR8-NEXT:    vcmpgtud 2, 2, 3
15681; PWR8-NEXT:    blr
15682;
15683; PWR9-LABEL: ugt_15_v2i64:
15684; PWR9:       # %bb.0:
15685; PWR9-NEXT:    addis 3, 2, .LCPI128_0@toc@ha
15686; PWR9-NEXT:    vpopcntd 2, 2
15687; PWR9-NEXT:    addi 3, 3, .LCPI128_0@toc@l
15688; PWR9-NEXT:    lxvx 35, 0, 3
15689; PWR9-NEXT:    vcmpgtud 2, 2, 3
15690; PWR9-NEXT:    blr
15691  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15692  %3 = icmp ugt <2 x i64> %2, <i64 15, i64 15>
15693  %4 = sext <2 x i1> %3 to <2 x i64>
15694  ret <2 x i64> %4
15695}
15696
15697define <2 x i64> @ult_16_v2i64(<2 x i64> %0) {
15698; PWR5-LABEL: ult_16_v2i64:
15699; PWR5:       # %bb.0:
15700; PWR5-NEXT:    lis 5, 21845
15701; PWR5-NEXT:    lis 6, 13107
15702; PWR5-NEXT:    ori 5, 5, 21845
15703; PWR5-NEXT:    rotldi 8, 4, 63
15704; PWR5-NEXT:    rotldi 9, 3, 63
15705; PWR5-NEXT:    rldimi 5, 5, 32, 0
15706; PWR5-NEXT:    and 8, 8, 5
15707; PWR5-NEXT:    and 5, 9, 5
15708; PWR5-NEXT:    ori 6, 6, 13107
15709; PWR5-NEXT:    sub 3, 3, 5
15710; PWR5-NEXT:    rldimi 6, 6, 32, 0
15711; PWR5-NEXT:    sub 4, 4, 8
15712; PWR5-NEXT:    and 8, 3, 6
15713; PWR5-NEXT:    rotldi 3, 3, 62
15714; PWR5-NEXT:    and 3, 3, 6
15715; PWR5-NEXT:    lis 7, 3855
15716; PWR5-NEXT:    and 5, 4, 6
15717; PWR5-NEXT:    rotldi 4, 4, 62
15718; PWR5-NEXT:    add 3, 8, 3
15719; PWR5-NEXT:    lis 9, 257
15720; PWR5-NEXT:    ori 7, 7, 3855
15721; PWR5-NEXT:    and 4, 4, 6
15722; PWR5-NEXT:    rldicl 6, 3, 60, 4
15723; PWR5-NEXT:    ori 9, 9, 257
15724; PWR5-NEXT:    rldimi 7, 7, 32, 0
15725; PWR5-NEXT:    add 4, 5, 4
15726; PWR5-NEXT:    add 3, 3, 6
15727; PWR5-NEXT:    rldimi 9, 9, 32, 0
15728; PWR5-NEXT:    rldicl 5, 4, 60, 4
15729; PWR5-NEXT:    and 3, 3, 7
15730; PWR5-NEXT:    add 4, 4, 5
15731; PWR5-NEXT:    mulld 3, 3, 9
15732; PWR5-NEXT:    and 4, 4, 7
15733; PWR5-NEXT:    rldicl 3, 3, 8, 56
15734; PWR5-NEXT:    li 5, 16
15735; PWR5-NEXT:    mulld 4, 4, 9
15736; PWR5-NEXT:    subc 6, 3, 5
15737; PWR5-NEXT:    rldicl 4, 4, 8, 56
15738; PWR5-NEXT:    subfe 3, 3, 3
15739; PWR5-NEXT:    subc 5, 4, 5
15740; PWR5-NEXT:    subfe 4, 4, 4
15741; PWR5-NEXT:    blr
15742;
15743; PWR6-LABEL: ult_16_v2i64:
15744; PWR6:       # %bb.0:
15745; PWR6-NEXT:    lis 5, 21845
15746; PWR6-NEXT:    lis 6, 13107
15747; PWR6-NEXT:    ori 5, 5, 21845
15748; PWR6-NEXT:    rotldi 8, 4, 63
15749; PWR6-NEXT:    rotldi 9, 3, 63
15750; PWR6-NEXT:    rldimi 5, 5, 32, 0
15751; PWR6-NEXT:    and 8, 8, 5
15752; PWR6-NEXT:    and 5, 9, 5
15753; PWR6-NEXT:    ori 6, 6, 13107
15754; PWR6-NEXT:    sub 3, 3, 5
15755; PWR6-NEXT:    rldimi 6, 6, 32, 0
15756; PWR6-NEXT:    sub 4, 4, 8
15757; PWR6-NEXT:    and 8, 3, 6
15758; PWR6-NEXT:    rotldi 3, 3, 62
15759; PWR6-NEXT:    and 3, 3, 6
15760; PWR6-NEXT:    lis 7, 3855
15761; PWR6-NEXT:    and 5, 4, 6
15762; PWR6-NEXT:    rotldi 4, 4, 62
15763; PWR6-NEXT:    add 3, 8, 3
15764; PWR6-NEXT:    lis 9, 257
15765; PWR6-NEXT:    ori 7, 7, 3855
15766; PWR6-NEXT:    and 4, 4, 6
15767; PWR6-NEXT:    rldicl 6, 3, 60, 4
15768; PWR6-NEXT:    ori 9, 9, 257
15769; PWR6-NEXT:    rldimi 7, 7, 32, 0
15770; PWR6-NEXT:    add 4, 5, 4
15771; PWR6-NEXT:    add 3, 3, 6
15772; PWR6-NEXT:    rldimi 9, 9, 32, 0
15773; PWR6-NEXT:    rldicl 5, 4, 60, 4
15774; PWR6-NEXT:    and 3, 3, 7
15775; PWR6-NEXT:    add 4, 4, 5
15776; PWR6-NEXT:    mulld 3, 3, 9
15777; PWR6-NEXT:    and 4, 4, 7
15778; PWR6-NEXT:    rldicl 3, 3, 8, 56
15779; PWR6-NEXT:    li 5, 16
15780; PWR6-NEXT:    mulld 4, 4, 9
15781; PWR6-NEXT:    subc 6, 3, 5
15782; PWR6-NEXT:    rldicl 4, 4, 8, 56
15783; PWR6-NEXT:    subfe 3, 3, 3
15784; PWR6-NEXT:    subc 5, 4, 5
15785; PWR6-NEXT:    subfe 4, 4, 4
15786; PWR6-NEXT:    blr
15787;
15788; PWR7-LABEL: ult_16_v2i64:
15789; PWR7:       # %bb.0:
15790; PWR7-NEXT:    addi 3, 1, -32
15791; PWR7-NEXT:    li 5, 0
15792; PWR7-NEXT:    li 6, -1
15793; PWR7-NEXT:    stxvd2x 34, 0, 3
15794; PWR7-NEXT:    ld 3, -24(1)
15795; PWR7-NEXT:    ld 4, -32(1)
15796; PWR7-NEXT:    popcntd 3, 3
15797; PWR7-NEXT:    popcntd 4, 4
15798; PWR7-NEXT:    cmpldi 3, 16
15799; PWR7-NEXT:    isellt 3, 6, 5
15800; PWR7-NEXT:    cmpldi 4, 16
15801; PWR7-NEXT:    isellt 4, 6, 5
15802; PWR7-NEXT:    std 3, -8(1)
15803; PWR7-NEXT:    addi 3, 1, -16
15804; PWR7-NEXT:    std 4, -16(1)
15805; PWR7-NEXT:    lxvd2x 34, 0, 3
15806; PWR7-NEXT:    blr
15807;
15808; PWR8-LABEL: ult_16_v2i64:
15809; PWR8:       # %bb.0:
15810; PWR8-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
15811; PWR8-NEXT:    vpopcntd 2, 2
15812; PWR8-NEXT:    addi 3, 3, .LCPI129_0@toc@l
15813; PWR8-NEXT:    lxvd2x 35, 0, 3
15814; PWR8-NEXT:    vcmpgtud 2, 3, 2
15815; PWR8-NEXT:    blr
15816;
15817; PWR9-LABEL: ult_16_v2i64:
15818; PWR9:       # %bb.0:
15819; PWR9-NEXT:    addis 3, 2, .LCPI129_0@toc@ha
15820; PWR9-NEXT:    vpopcntd 2, 2
15821; PWR9-NEXT:    addi 3, 3, .LCPI129_0@toc@l
15822; PWR9-NEXT:    lxvx 35, 0, 3
15823; PWR9-NEXT:    vcmpgtud 2, 3, 2
15824; PWR9-NEXT:    blr
15825  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15826  %3 = icmp ult <2 x i64> %2, <i64 16, i64 16>
15827  %4 = sext <2 x i1> %3 to <2 x i64>
15828  ret <2 x i64> %4
15829}
15830
15831define <2 x i64> @ugt_16_v2i64(<2 x i64> %0) {
15832; PWR5-LABEL: ugt_16_v2i64:
15833; PWR5:       # %bb.0:
15834; PWR5-NEXT:    lis 5, 21845
15835; PWR5-NEXT:    lis 6, 13107
15836; PWR5-NEXT:    ori 5, 5, 21845
15837; PWR5-NEXT:    rotldi 8, 4, 63
15838; PWR5-NEXT:    rotldi 9, 3, 63
15839; PWR5-NEXT:    rldimi 5, 5, 32, 0
15840; PWR5-NEXT:    and 8, 8, 5
15841; PWR5-NEXT:    and 5, 9, 5
15842; PWR5-NEXT:    ori 6, 6, 13107
15843; PWR5-NEXT:    sub 3, 3, 5
15844; PWR5-NEXT:    rldimi 6, 6, 32, 0
15845; PWR5-NEXT:    sub 4, 4, 8
15846; PWR5-NEXT:    and 8, 3, 6
15847; PWR5-NEXT:    rotldi 3, 3, 62
15848; PWR5-NEXT:    and 3, 3, 6
15849; PWR5-NEXT:    lis 7, 3855
15850; PWR5-NEXT:    and 5, 4, 6
15851; PWR5-NEXT:    rotldi 4, 4, 62
15852; PWR5-NEXT:    add 3, 8, 3
15853; PWR5-NEXT:    lis 9, 257
15854; PWR5-NEXT:    ori 7, 7, 3855
15855; PWR5-NEXT:    and 4, 4, 6
15856; PWR5-NEXT:    rldicl 6, 3, 60, 4
15857; PWR5-NEXT:    ori 9, 9, 257
15858; PWR5-NEXT:    rldimi 7, 7, 32, 0
15859; PWR5-NEXT:    add 4, 5, 4
15860; PWR5-NEXT:    add 3, 3, 6
15861; PWR5-NEXT:    rldimi 9, 9, 32, 0
15862; PWR5-NEXT:    rldicl 5, 4, 60, 4
15863; PWR5-NEXT:    and 3, 3, 7
15864; PWR5-NEXT:    add 4, 4, 5
15865; PWR5-NEXT:    mulld 3, 3, 9
15866; PWR5-NEXT:    and 4, 4, 7
15867; PWR5-NEXT:    rldicl 3, 3, 8, 56
15868; PWR5-NEXT:    mulld 4, 4, 9
15869; PWR5-NEXT:    li 5, 16
15870; PWR5-NEXT:    subfic 3, 3, 16
15871; PWR5-NEXT:    rldicl 4, 4, 8, 56
15872; PWR5-NEXT:    subfe 3, 5, 5
15873; PWR5-NEXT:    subfic 4, 4, 16
15874; PWR5-NEXT:    subfe 4, 5, 5
15875; PWR5-NEXT:    blr
15876;
15877; PWR6-LABEL: ugt_16_v2i64:
15878; PWR6:       # %bb.0:
15879; PWR6-NEXT:    lis 5, 21845
15880; PWR6-NEXT:    lis 6, 13107
15881; PWR6-NEXT:    ori 5, 5, 21845
15882; PWR6-NEXT:    rotldi 8, 4, 63
15883; PWR6-NEXT:    rotldi 9, 3, 63
15884; PWR6-NEXT:    rldimi 5, 5, 32, 0
15885; PWR6-NEXT:    and 8, 8, 5
15886; PWR6-NEXT:    and 5, 9, 5
15887; PWR6-NEXT:    ori 6, 6, 13107
15888; PWR6-NEXT:    sub 3, 3, 5
15889; PWR6-NEXT:    rldimi 6, 6, 32, 0
15890; PWR6-NEXT:    sub 4, 4, 8
15891; PWR6-NEXT:    and 8, 3, 6
15892; PWR6-NEXT:    rotldi 3, 3, 62
15893; PWR6-NEXT:    and 3, 3, 6
15894; PWR6-NEXT:    lis 7, 3855
15895; PWR6-NEXT:    and 5, 4, 6
15896; PWR6-NEXT:    rotldi 4, 4, 62
15897; PWR6-NEXT:    add 3, 8, 3
15898; PWR6-NEXT:    lis 9, 257
15899; PWR6-NEXT:    ori 7, 7, 3855
15900; PWR6-NEXT:    and 4, 4, 6
15901; PWR6-NEXT:    rldicl 6, 3, 60, 4
15902; PWR6-NEXT:    ori 9, 9, 257
15903; PWR6-NEXT:    rldimi 7, 7, 32, 0
15904; PWR6-NEXT:    add 4, 5, 4
15905; PWR6-NEXT:    add 3, 3, 6
15906; PWR6-NEXT:    rldimi 9, 9, 32, 0
15907; PWR6-NEXT:    rldicl 5, 4, 60, 4
15908; PWR6-NEXT:    and 3, 3, 7
15909; PWR6-NEXT:    add 4, 4, 5
15910; PWR6-NEXT:    mulld 3, 3, 9
15911; PWR6-NEXT:    and 4, 4, 7
15912; PWR6-NEXT:    rldicl 3, 3, 8, 56
15913; PWR6-NEXT:    mulld 4, 4, 9
15914; PWR6-NEXT:    li 5, 16
15915; PWR6-NEXT:    subfic 3, 3, 16
15916; PWR6-NEXT:    rldicl 4, 4, 8, 56
15917; PWR6-NEXT:    subfe 3, 5, 5
15918; PWR6-NEXT:    subfic 4, 4, 16
15919; PWR6-NEXT:    subfe 4, 5, 5
15920; PWR6-NEXT:    blr
15921;
15922; PWR7-LABEL: ugt_16_v2i64:
15923; PWR7:       # %bb.0:
15924; PWR7-NEXT:    addi 3, 1, -32
15925; PWR7-NEXT:    li 5, 0
15926; PWR7-NEXT:    li 6, -1
15927; PWR7-NEXT:    stxvd2x 34, 0, 3
15928; PWR7-NEXT:    ld 3, -24(1)
15929; PWR7-NEXT:    ld 4, -32(1)
15930; PWR7-NEXT:    popcntd 3, 3
15931; PWR7-NEXT:    popcntd 4, 4
15932; PWR7-NEXT:    cmpldi 3, 16
15933; PWR7-NEXT:    iselgt 3, 6, 5
15934; PWR7-NEXT:    cmpldi 4, 16
15935; PWR7-NEXT:    iselgt 4, 6, 5
15936; PWR7-NEXT:    std 3, -8(1)
15937; PWR7-NEXT:    addi 3, 1, -16
15938; PWR7-NEXT:    std 4, -16(1)
15939; PWR7-NEXT:    lxvd2x 34, 0, 3
15940; PWR7-NEXT:    blr
15941;
15942; PWR8-LABEL: ugt_16_v2i64:
15943; PWR8:       # %bb.0:
15944; PWR8-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
15945; PWR8-NEXT:    vpopcntd 2, 2
15946; PWR8-NEXT:    addi 3, 3, .LCPI130_0@toc@l
15947; PWR8-NEXT:    lxvd2x 35, 0, 3
15948; PWR8-NEXT:    vcmpgtud 2, 2, 3
15949; PWR8-NEXT:    blr
15950;
15951; PWR9-LABEL: ugt_16_v2i64:
15952; PWR9:       # %bb.0:
15953; PWR9-NEXT:    addis 3, 2, .LCPI130_0@toc@ha
15954; PWR9-NEXT:    vpopcntd 2, 2
15955; PWR9-NEXT:    addi 3, 3, .LCPI130_0@toc@l
15956; PWR9-NEXT:    lxvx 35, 0, 3
15957; PWR9-NEXT:    vcmpgtud 2, 2, 3
15958; PWR9-NEXT:    blr
15959  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
15960  %3 = icmp ugt <2 x i64> %2, <i64 16, i64 16>
15961  %4 = sext <2 x i1> %3 to <2 x i64>
15962  ret <2 x i64> %4
15963}
15964
15965define <2 x i64> @ult_17_v2i64(<2 x i64> %0) {
15966; PWR5-LABEL: ult_17_v2i64:
15967; PWR5:       # %bb.0:
15968; PWR5-NEXT:    lis 5, 21845
15969; PWR5-NEXT:    lis 6, 13107
15970; PWR5-NEXT:    ori 5, 5, 21845
15971; PWR5-NEXT:    rotldi 8, 4, 63
15972; PWR5-NEXT:    rotldi 9, 3, 63
15973; PWR5-NEXT:    rldimi 5, 5, 32, 0
15974; PWR5-NEXT:    and 8, 8, 5
15975; PWR5-NEXT:    and 5, 9, 5
15976; PWR5-NEXT:    ori 6, 6, 13107
15977; PWR5-NEXT:    sub 3, 3, 5
15978; PWR5-NEXT:    rldimi 6, 6, 32, 0
15979; PWR5-NEXT:    sub 4, 4, 8
15980; PWR5-NEXT:    and 8, 3, 6
15981; PWR5-NEXT:    rotldi 3, 3, 62
15982; PWR5-NEXT:    and 3, 3, 6
15983; PWR5-NEXT:    lis 7, 3855
15984; PWR5-NEXT:    and 5, 4, 6
15985; PWR5-NEXT:    rotldi 4, 4, 62
15986; PWR5-NEXT:    add 3, 8, 3
15987; PWR5-NEXT:    lis 9, 257
15988; PWR5-NEXT:    ori 7, 7, 3855
15989; PWR5-NEXT:    and 4, 4, 6
15990; PWR5-NEXT:    rldicl 6, 3, 60, 4
15991; PWR5-NEXT:    ori 9, 9, 257
15992; PWR5-NEXT:    rldimi 7, 7, 32, 0
15993; PWR5-NEXT:    add 4, 5, 4
15994; PWR5-NEXT:    add 3, 3, 6
15995; PWR5-NEXT:    rldimi 9, 9, 32, 0
15996; PWR5-NEXT:    rldicl 5, 4, 60, 4
15997; PWR5-NEXT:    and 3, 3, 7
15998; PWR5-NEXT:    add 4, 4, 5
15999; PWR5-NEXT:    mulld 3, 3, 9
16000; PWR5-NEXT:    and 4, 4, 7
16001; PWR5-NEXT:    rldicl 3, 3, 8, 56
16002; PWR5-NEXT:    li 5, 17
16003; PWR5-NEXT:    mulld 4, 4, 9
16004; PWR5-NEXT:    subc 6, 3, 5
16005; PWR5-NEXT:    rldicl 4, 4, 8, 56
16006; PWR5-NEXT:    subfe 3, 3, 3
16007; PWR5-NEXT:    subc 5, 4, 5
16008; PWR5-NEXT:    subfe 4, 4, 4
16009; PWR5-NEXT:    blr
16010;
16011; PWR6-LABEL: ult_17_v2i64:
16012; PWR6:       # %bb.0:
16013; PWR6-NEXT:    lis 5, 21845
16014; PWR6-NEXT:    lis 6, 13107
16015; PWR6-NEXT:    ori 5, 5, 21845
16016; PWR6-NEXT:    rotldi 8, 4, 63
16017; PWR6-NEXT:    rotldi 9, 3, 63
16018; PWR6-NEXT:    rldimi 5, 5, 32, 0
16019; PWR6-NEXT:    and 8, 8, 5
16020; PWR6-NEXT:    and 5, 9, 5
16021; PWR6-NEXT:    ori 6, 6, 13107
16022; PWR6-NEXT:    sub 3, 3, 5
16023; PWR6-NEXT:    rldimi 6, 6, 32, 0
16024; PWR6-NEXT:    sub 4, 4, 8
16025; PWR6-NEXT:    and 8, 3, 6
16026; PWR6-NEXT:    rotldi 3, 3, 62
16027; PWR6-NEXT:    and 3, 3, 6
16028; PWR6-NEXT:    lis 7, 3855
16029; PWR6-NEXT:    and 5, 4, 6
16030; PWR6-NEXT:    rotldi 4, 4, 62
16031; PWR6-NEXT:    add 3, 8, 3
16032; PWR6-NEXT:    lis 9, 257
16033; PWR6-NEXT:    ori 7, 7, 3855
16034; PWR6-NEXT:    and 4, 4, 6
16035; PWR6-NEXT:    rldicl 6, 3, 60, 4
16036; PWR6-NEXT:    ori 9, 9, 257
16037; PWR6-NEXT:    rldimi 7, 7, 32, 0
16038; PWR6-NEXT:    add 4, 5, 4
16039; PWR6-NEXT:    add 3, 3, 6
16040; PWR6-NEXT:    rldimi 9, 9, 32, 0
16041; PWR6-NEXT:    rldicl 5, 4, 60, 4
16042; PWR6-NEXT:    and 3, 3, 7
16043; PWR6-NEXT:    add 4, 4, 5
16044; PWR6-NEXT:    mulld 3, 3, 9
16045; PWR6-NEXT:    and 4, 4, 7
16046; PWR6-NEXT:    rldicl 3, 3, 8, 56
16047; PWR6-NEXT:    li 5, 17
16048; PWR6-NEXT:    mulld 4, 4, 9
16049; PWR6-NEXT:    subc 6, 3, 5
16050; PWR6-NEXT:    rldicl 4, 4, 8, 56
16051; PWR6-NEXT:    subfe 3, 3, 3
16052; PWR6-NEXT:    subc 5, 4, 5
16053; PWR6-NEXT:    subfe 4, 4, 4
16054; PWR6-NEXT:    blr
16055;
16056; PWR7-LABEL: ult_17_v2i64:
16057; PWR7:       # %bb.0:
16058; PWR7-NEXT:    addi 3, 1, -32
16059; PWR7-NEXT:    li 5, 0
16060; PWR7-NEXT:    li 6, -1
16061; PWR7-NEXT:    stxvd2x 34, 0, 3
16062; PWR7-NEXT:    ld 3, -24(1)
16063; PWR7-NEXT:    ld 4, -32(1)
16064; PWR7-NEXT:    popcntd 3, 3
16065; PWR7-NEXT:    popcntd 4, 4
16066; PWR7-NEXT:    cmpldi 3, 17
16067; PWR7-NEXT:    isellt 3, 6, 5
16068; PWR7-NEXT:    cmpldi 4, 17
16069; PWR7-NEXT:    isellt 4, 6, 5
16070; PWR7-NEXT:    std 3, -8(1)
16071; PWR7-NEXT:    addi 3, 1, -16
16072; PWR7-NEXT:    std 4, -16(1)
16073; PWR7-NEXT:    lxvd2x 34, 0, 3
16074; PWR7-NEXT:    blr
16075;
16076; PWR8-LABEL: ult_17_v2i64:
16077; PWR8:       # %bb.0:
16078; PWR8-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
16079; PWR8-NEXT:    vpopcntd 2, 2
16080; PWR8-NEXT:    addi 3, 3, .LCPI131_0@toc@l
16081; PWR8-NEXT:    lxvd2x 35, 0, 3
16082; PWR8-NEXT:    vcmpgtud 2, 3, 2
16083; PWR8-NEXT:    blr
16084;
16085; PWR9-LABEL: ult_17_v2i64:
16086; PWR9:       # %bb.0:
16087; PWR9-NEXT:    addis 3, 2, .LCPI131_0@toc@ha
16088; PWR9-NEXT:    vpopcntd 2, 2
16089; PWR9-NEXT:    addi 3, 3, .LCPI131_0@toc@l
16090; PWR9-NEXT:    lxvx 35, 0, 3
16091; PWR9-NEXT:    vcmpgtud 2, 3, 2
16092; PWR9-NEXT:    blr
16093  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16094  %3 = icmp ult <2 x i64> %2, <i64 17, i64 17>
16095  %4 = sext <2 x i1> %3 to <2 x i64>
16096  ret <2 x i64> %4
16097}
16098
16099define <2 x i64> @ugt_17_v2i64(<2 x i64> %0) {
16100; PWR5-LABEL: ugt_17_v2i64:
16101; PWR5:       # %bb.0:
16102; PWR5-NEXT:    lis 5, 21845
16103; PWR5-NEXT:    lis 6, 13107
16104; PWR5-NEXT:    ori 5, 5, 21845
16105; PWR5-NEXT:    rotldi 8, 4, 63
16106; PWR5-NEXT:    rotldi 9, 3, 63
16107; PWR5-NEXT:    rldimi 5, 5, 32, 0
16108; PWR5-NEXT:    and 8, 8, 5
16109; PWR5-NEXT:    and 5, 9, 5
16110; PWR5-NEXT:    ori 6, 6, 13107
16111; PWR5-NEXT:    sub 3, 3, 5
16112; PWR5-NEXT:    rldimi 6, 6, 32, 0
16113; PWR5-NEXT:    sub 4, 4, 8
16114; PWR5-NEXT:    and 8, 3, 6
16115; PWR5-NEXT:    rotldi 3, 3, 62
16116; PWR5-NEXT:    and 3, 3, 6
16117; PWR5-NEXT:    lis 7, 3855
16118; PWR5-NEXT:    and 5, 4, 6
16119; PWR5-NEXT:    rotldi 4, 4, 62
16120; PWR5-NEXT:    add 3, 8, 3
16121; PWR5-NEXT:    lis 9, 257
16122; PWR5-NEXT:    ori 7, 7, 3855
16123; PWR5-NEXT:    and 4, 4, 6
16124; PWR5-NEXT:    rldicl 6, 3, 60, 4
16125; PWR5-NEXT:    ori 9, 9, 257
16126; PWR5-NEXT:    rldimi 7, 7, 32, 0
16127; PWR5-NEXT:    add 4, 5, 4
16128; PWR5-NEXT:    add 3, 3, 6
16129; PWR5-NEXT:    rldimi 9, 9, 32, 0
16130; PWR5-NEXT:    rldicl 5, 4, 60, 4
16131; PWR5-NEXT:    and 3, 3, 7
16132; PWR5-NEXT:    add 4, 4, 5
16133; PWR5-NEXT:    mulld 3, 3, 9
16134; PWR5-NEXT:    and 4, 4, 7
16135; PWR5-NEXT:    rldicl 3, 3, 8, 56
16136; PWR5-NEXT:    mulld 4, 4, 9
16137; PWR5-NEXT:    li 5, 17
16138; PWR5-NEXT:    subfic 3, 3, 17
16139; PWR5-NEXT:    rldicl 4, 4, 8, 56
16140; PWR5-NEXT:    subfe 3, 5, 5
16141; PWR5-NEXT:    subfic 4, 4, 17
16142; PWR5-NEXT:    subfe 4, 5, 5
16143; PWR5-NEXT:    blr
16144;
16145; PWR6-LABEL: ugt_17_v2i64:
16146; PWR6:       # %bb.0:
16147; PWR6-NEXT:    lis 5, 21845
16148; PWR6-NEXT:    lis 6, 13107
16149; PWR6-NEXT:    ori 5, 5, 21845
16150; PWR6-NEXT:    rotldi 8, 4, 63
16151; PWR6-NEXT:    rotldi 9, 3, 63
16152; PWR6-NEXT:    rldimi 5, 5, 32, 0
16153; PWR6-NEXT:    and 8, 8, 5
16154; PWR6-NEXT:    and 5, 9, 5
16155; PWR6-NEXT:    ori 6, 6, 13107
16156; PWR6-NEXT:    sub 3, 3, 5
16157; PWR6-NEXT:    rldimi 6, 6, 32, 0
16158; PWR6-NEXT:    sub 4, 4, 8
16159; PWR6-NEXT:    and 8, 3, 6
16160; PWR6-NEXT:    rotldi 3, 3, 62
16161; PWR6-NEXT:    and 3, 3, 6
16162; PWR6-NEXT:    lis 7, 3855
16163; PWR6-NEXT:    and 5, 4, 6
16164; PWR6-NEXT:    rotldi 4, 4, 62
16165; PWR6-NEXT:    add 3, 8, 3
16166; PWR6-NEXT:    lis 9, 257
16167; PWR6-NEXT:    ori 7, 7, 3855
16168; PWR6-NEXT:    and 4, 4, 6
16169; PWR6-NEXT:    rldicl 6, 3, 60, 4
16170; PWR6-NEXT:    ori 9, 9, 257
16171; PWR6-NEXT:    rldimi 7, 7, 32, 0
16172; PWR6-NEXT:    add 4, 5, 4
16173; PWR6-NEXT:    add 3, 3, 6
16174; PWR6-NEXT:    rldimi 9, 9, 32, 0
16175; PWR6-NEXT:    rldicl 5, 4, 60, 4
16176; PWR6-NEXT:    and 3, 3, 7
16177; PWR6-NEXT:    add 4, 4, 5
16178; PWR6-NEXT:    mulld 3, 3, 9
16179; PWR6-NEXT:    and 4, 4, 7
16180; PWR6-NEXT:    rldicl 3, 3, 8, 56
16181; PWR6-NEXT:    mulld 4, 4, 9
16182; PWR6-NEXT:    li 5, 17
16183; PWR6-NEXT:    subfic 3, 3, 17
16184; PWR6-NEXT:    rldicl 4, 4, 8, 56
16185; PWR6-NEXT:    subfe 3, 5, 5
16186; PWR6-NEXT:    subfic 4, 4, 17
16187; PWR6-NEXT:    subfe 4, 5, 5
16188; PWR6-NEXT:    blr
16189;
16190; PWR7-LABEL: ugt_17_v2i64:
16191; PWR7:       # %bb.0:
16192; PWR7-NEXT:    addi 3, 1, -32
16193; PWR7-NEXT:    li 5, 0
16194; PWR7-NEXT:    li 6, -1
16195; PWR7-NEXT:    stxvd2x 34, 0, 3
16196; PWR7-NEXT:    ld 3, -24(1)
16197; PWR7-NEXT:    ld 4, -32(1)
16198; PWR7-NEXT:    popcntd 3, 3
16199; PWR7-NEXT:    popcntd 4, 4
16200; PWR7-NEXT:    cmpldi 3, 17
16201; PWR7-NEXT:    iselgt 3, 6, 5
16202; PWR7-NEXT:    cmpldi 4, 17
16203; PWR7-NEXT:    iselgt 4, 6, 5
16204; PWR7-NEXT:    std 3, -8(1)
16205; PWR7-NEXT:    addi 3, 1, -16
16206; PWR7-NEXT:    std 4, -16(1)
16207; PWR7-NEXT:    lxvd2x 34, 0, 3
16208; PWR7-NEXT:    blr
16209;
16210; PWR8-LABEL: ugt_17_v2i64:
16211; PWR8:       # %bb.0:
16212; PWR8-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
16213; PWR8-NEXT:    vpopcntd 2, 2
16214; PWR8-NEXT:    addi 3, 3, .LCPI132_0@toc@l
16215; PWR8-NEXT:    lxvd2x 35, 0, 3
16216; PWR8-NEXT:    vcmpgtud 2, 2, 3
16217; PWR8-NEXT:    blr
16218;
16219; PWR9-LABEL: ugt_17_v2i64:
16220; PWR9:       # %bb.0:
16221; PWR9-NEXT:    addis 3, 2, .LCPI132_0@toc@ha
16222; PWR9-NEXT:    vpopcntd 2, 2
16223; PWR9-NEXT:    addi 3, 3, .LCPI132_0@toc@l
16224; PWR9-NEXT:    lxvx 35, 0, 3
16225; PWR9-NEXT:    vcmpgtud 2, 2, 3
16226; PWR9-NEXT:    blr
16227  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16228  %3 = icmp ugt <2 x i64> %2, <i64 17, i64 17>
16229  %4 = sext <2 x i1> %3 to <2 x i64>
16230  ret <2 x i64> %4
16231}
16232
16233define <2 x i64> @ult_18_v2i64(<2 x i64> %0) {
16234; PWR5-LABEL: ult_18_v2i64:
16235; PWR5:       # %bb.0:
16236; PWR5-NEXT:    lis 5, 21845
16237; PWR5-NEXT:    lis 6, 13107
16238; PWR5-NEXT:    ori 5, 5, 21845
16239; PWR5-NEXT:    rotldi 8, 4, 63
16240; PWR5-NEXT:    rotldi 9, 3, 63
16241; PWR5-NEXT:    rldimi 5, 5, 32, 0
16242; PWR5-NEXT:    and 8, 8, 5
16243; PWR5-NEXT:    and 5, 9, 5
16244; PWR5-NEXT:    ori 6, 6, 13107
16245; PWR5-NEXT:    sub 3, 3, 5
16246; PWR5-NEXT:    rldimi 6, 6, 32, 0
16247; PWR5-NEXT:    sub 4, 4, 8
16248; PWR5-NEXT:    and 8, 3, 6
16249; PWR5-NEXT:    rotldi 3, 3, 62
16250; PWR5-NEXT:    and 3, 3, 6
16251; PWR5-NEXT:    lis 7, 3855
16252; PWR5-NEXT:    and 5, 4, 6
16253; PWR5-NEXT:    rotldi 4, 4, 62
16254; PWR5-NEXT:    add 3, 8, 3
16255; PWR5-NEXT:    lis 9, 257
16256; PWR5-NEXT:    ori 7, 7, 3855
16257; PWR5-NEXT:    and 4, 4, 6
16258; PWR5-NEXT:    rldicl 6, 3, 60, 4
16259; PWR5-NEXT:    ori 9, 9, 257
16260; PWR5-NEXT:    rldimi 7, 7, 32, 0
16261; PWR5-NEXT:    add 4, 5, 4
16262; PWR5-NEXT:    add 3, 3, 6
16263; PWR5-NEXT:    rldimi 9, 9, 32, 0
16264; PWR5-NEXT:    rldicl 5, 4, 60, 4
16265; PWR5-NEXT:    and 3, 3, 7
16266; PWR5-NEXT:    add 4, 4, 5
16267; PWR5-NEXT:    mulld 3, 3, 9
16268; PWR5-NEXT:    and 4, 4, 7
16269; PWR5-NEXT:    rldicl 3, 3, 8, 56
16270; PWR5-NEXT:    li 5, 18
16271; PWR5-NEXT:    mulld 4, 4, 9
16272; PWR5-NEXT:    subc 6, 3, 5
16273; PWR5-NEXT:    rldicl 4, 4, 8, 56
16274; PWR5-NEXT:    subfe 3, 3, 3
16275; PWR5-NEXT:    subc 5, 4, 5
16276; PWR5-NEXT:    subfe 4, 4, 4
16277; PWR5-NEXT:    blr
16278;
16279; PWR6-LABEL: ult_18_v2i64:
16280; PWR6:       # %bb.0:
16281; PWR6-NEXT:    lis 5, 21845
16282; PWR6-NEXT:    lis 6, 13107
16283; PWR6-NEXT:    ori 5, 5, 21845
16284; PWR6-NEXT:    rotldi 8, 4, 63
16285; PWR6-NEXT:    rotldi 9, 3, 63
16286; PWR6-NEXT:    rldimi 5, 5, 32, 0
16287; PWR6-NEXT:    and 8, 8, 5
16288; PWR6-NEXT:    and 5, 9, 5
16289; PWR6-NEXT:    ori 6, 6, 13107
16290; PWR6-NEXT:    sub 3, 3, 5
16291; PWR6-NEXT:    rldimi 6, 6, 32, 0
16292; PWR6-NEXT:    sub 4, 4, 8
16293; PWR6-NEXT:    and 8, 3, 6
16294; PWR6-NEXT:    rotldi 3, 3, 62
16295; PWR6-NEXT:    and 3, 3, 6
16296; PWR6-NEXT:    lis 7, 3855
16297; PWR6-NEXT:    and 5, 4, 6
16298; PWR6-NEXT:    rotldi 4, 4, 62
16299; PWR6-NEXT:    add 3, 8, 3
16300; PWR6-NEXT:    lis 9, 257
16301; PWR6-NEXT:    ori 7, 7, 3855
16302; PWR6-NEXT:    and 4, 4, 6
16303; PWR6-NEXT:    rldicl 6, 3, 60, 4
16304; PWR6-NEXT:    ori 9, 9, 257
16305; PWR6-NEXT:    rldimi 7, 7, 32, 0
16306; PWR6-NEXT:    add 4, 5, 4
16307; PWR6-NEXT:    add 3, 3, 6
16308; PWR6-NEXT:    rldimi 9, 9, 32, 0
16309; PWR6-NEXT:    rldicl 5, 4, 60, 4
16310; PWR6-NEXT:    and 3, 3, 7
16311; PWR6-NEXT:    add 4, 4, 5
16312; PWR6-NEXT:    mulld 3, 3, 9
16313; PWR6-NEXT:    and 4, 4, 7
16314; PWR6-NEXT:    rldicl 3, 3, 8, 56
16315; PWR6-NEXT:    li 5, 18
16316; PWR6-NEXT:    mulld 4, 4, 9
16317; PWR6-NEXT:    subc 6, 3, 5
16318; PWR6-NEXT:    rldicl 4, 4, 8, 56
16319; PWR6-NEXT:    subfe 3, 3, 3
16320; PWR6-NEXT:    subc 5, 4, 5
16321; PWR6-NEXT:    subfe 4, 4, 4
16322; PWR6-NEXT:    blr
16323;
16324; PWR7-LABEL: ult_18_v2i64:
16325; PWR7:       # %bb.0:
16326; PWR7-NEXT:    addi 3, 1, -32
16327; PWR7-NEXT:    li 5, 0
16328; PWR7-NEXT:    li 6, -1
16329; PWR7-NEXT:    stxvd2x 34, 0, 3
16330; PWR7-NEXT:    ld 3, -24(1)
16331; PWR7-NEXT:    ld 4, -32(1)
16332; PWR7-NEXT:    popcntd 3, 3
16333; PWR7-NEXT:    popcntd 4, 4
16334; PWR7-NEXT:    cmpldi 3, 18
16335; PWR7-NEXT:    isellt 3, 6, 5
16336; PWR7-NEXT:    cmpldi 4, 18
16337; PWR7-NEXT:    isellt 4, 6, 5
16338; PWR7-NEXT:    std 3, -8(1)
16339; PWR7-NEXT:    addi 3, 1, -16
16340; PWR7-NEXT:    std 4, -16(1)
16341; PWR7-NEXT:    lxvd2x 34, 0, 3
16342; PWR7-NEXT:    blr
16343;
16344; PWR8-LABEL: ult_18_v2i64:
16345; PWR8:       # %bb.0:
16346; PWR8-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
16347; PWR8-NEXT:    vpopcntd 2, 2
16348; PWR8-NEXT:    addi 3, 3, .LCPI133_0@toc@l
16349; PWR8-NEXT:    lxvd2x 35, 0, 3
16350; PWR8-NEXT:    vcmpgtud 2, 3, 2
16351; PWR8-NEXT:    blr
16352;
16353; PWR9-LABEL: ult_18_v2i64:
16354; PWR9:       # %bb.0:
16355; PWR9-NEXT:    addis 3, 2, .LCPI133_0@toc@ha
16356; PWR9-NEXT:    vpopcntd 2, 2
16357; PWR9-NEXT:    addi 3, 3, .LCPI133_0@toc@l
16358; PWR9-NEXT:    lxvx 35, 0, 3
16359; PWR9-NEXT:    vcmpgtud 2, 3, 2
16360; PWR9-NEXT:    blr
16361  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16362  %3 = icmp ult <2 x i64> %2, <i64 18, i64 18>
16363  %4 = sext <2 x i1> %3 to <2 x i64>
16364  ret <2 x i64> %4
16365}
16366
16367define <2 x i64> @ugt_18_v2i64(<2 x i64> %0) {
16368; PWR5-LABEL: ugt_18_v2i64:
16369; PWR5:       # %bb.0:
16370; PWR5-NEXT:    lis 5, 21845
16371; PWR5-NEXT:    lis 6, 13107
16372; PWR5-NEXT:    ori 5, 5, 21845
16373; PWR5-NEXT:    rotldi 8, 4, 63
16374; PWR5-NEXT:    rotldi 9, 3, 63
16375; PWR5-NEXT:    rldimi 5, 5, 32, 0
16376; PWR5-NEXT:    and 8, 8, 5
16377; PWR5-NEXT:    and 5, 9, 5
16378; PWR5-NEXT:    ori 6, 6, 13107
16379; PWR5-NEXT:    sub 3, 3, 5
16380; PWR5-NEXT:    rldimi 6, 6, 32, 0
16381; PWR5-NEXT:    sub 4, 4, 8
16382; PWR5-NEXT:    and 8, 3, 6
16383; PWR5-NEXT:    rotldi 3, 3, 62
16384; PWR5-NEXT:    and 3, 3, 6
16385; PWR5-NEXT:    lis 7, 3855
16386; PWR5-NEXT:    and 5, 4, 6
16387; PWR5-NEXT:    rotldi 4, 4, 62
16388; PWR5-NEXT:    add 3, 8, 3
16389; PWR5-NEXT:    lis 9, 257
16390; PWR5-NEXT:    ori 7, 7, 3855
16391; PWR5-NEXT:    and 4, 4, 6
16392; PWR5-NEXT:    rldicl 6, 3, 60, 4
16393; PWR5-NEXT:    ori 9, 9, 257
16394; PWR5-NEXT:    rldimi 7, 7, 32, 0
16395; PWR5-NEXT:    add 4, 5, 4
16396; PWR5-NEXT:    add 3, 3, 6
16397; PWR5-NEXT:    rldimi 9, 9, 32, 0
16398; PWR5-NEXT:    rldicl 5, 4, 60, 4
16399; PWR5-NEXT:    and 3, 3, 7
16400; PWR5-NEXT:    add 4, 4, 5
16401; PWR5-NEXT:    mulld 3, 3, 9
16402; PWR5-NEXT:    and 4, 4, 7
16403; PWR5-NEXT:    rldicl 3, 3, 8, 56
16404; PWR5-NEXT:    mulld 4, 4, 9
16405; PWR5-NEXT:    li 5, 18
16406; PWR5-NEXT:    subfic 3, 3, 18
16407; PWR5-NEXT:    rldicl 4, 4, 8, 56
16408; PWR5-NEXT:    subfe 3, 5, 5
16409; PWR5-NEXT:    subfic 4, 4, 18
16410; PWR5-NEXT:    subfe 4, 5, 5
16411; PWR5-NEXT:    blr
16412;
16413; PWR6-LABEL: ugt_18_v2i64:
16414; PWR6:       # %bb.0:
16415; PWR6-NEXT:    lis 5, 21845
16416; PWR6-NEXT:    lis 6, 13107
16417; PWR6-NEXT:    ori 5, 5, 21845
16418; PWR6-NEXT:    rotldi 8, 4, 63
16419; PWR6-NEXT:    rotldi 9, 3, 63
16420; PWR6-NEXT:    rldimi 5, 5, 32, 0
16421; PWR6-NEXT:    and 8, 8, 5
16422; PWR6-NEXT:    and 5, 9, 5
16423; PWR6-NEXT:    ori 6, 6, 13107
16424; PWR6-NEXT:    sub 3, 3, 5
16425; PWR6-NEXT:    rldimi 6, 6, 32, 0
16426; PWR6-NEXT:    sub 4, 4, 8
16427; PWR6-NEXT:    and 8, 3, 6
16428; PWR6-NEXT:    rotldi 3, 3, 62
16429; PWR6-NEXT:    and 3, 3, 6
16430; PWR6-NEXT:    lis 7, 3855
16431; PWR6-NEXT:    and 5, 4, 6
16432; PWR6-NEXT:    rotldi 4, 4, 62
16433; PWR6-NEXT:    add 3, 8, 3
16434; PWR6-NEXT:    lis 9, 257
16435; PWR6-NEXT:    ori 7, 7, 3855
16436; PWR6-NEXT:    and 4, 4, 6
16437; PWR6-NEXT:    rldicl 6, 3, 60, 4
16438; PWR6-NEXT:    ori 9, 9, 257
16439; PWR6-NEXT:    rldimi 7, 7, 32, 0
16440; PWR6-NEXT:    add 4, 5, 4
16441; PWR6-NEXT:    add 3, 3, 6
16442; PWR6-NEXT:    rldimi 9, 9, 32, 0
16443; PWR6-NEXT:    rldicl 5, 4, 60, 4
16444; PWR6-NEXT:    and 3, 3, 7
16445; PWR6-NEXT:    add 4, 4, 5
16446; PWR6-NEXT:    mulld 3, 3, 9
16447; PWR6-NEXT:    and 4, 4, 7
16448; PWR6-NEXT:    rldicl 3, 3, 8, 56
16449; PWR6-NEXT:    mulld 4, 4, 9
16450; PWR6-NEXT:    li 5, 18
16451; PWR6-NEXT:    subfic 3, 3, 18
16452; PWR6-NEXT:    rldicl 4, 4, 8, 56
16453; PWR6-NEXT:    subfe 3, 5, 5
16454; PWR6-NEXT:    subfic 4, 4, 18
16455; PWR6-NEXT:    subfe 4, 5, 5
16456; PWR6-NEXT:    blr
16457;
16458; PWR7-LABEL: ugt_18_v2i64:
16459; PWR7:       # %bb.0:
16460; PWR7-NEXT:    addi 3, 1, -32
16461; PWR7-NEXT:    li 5, 0
16462; PWR7-NEXT:    li 6, -1
16463; PWR7-NEXT:    stxvd2x 34, 0, 3
16464; PWR7-NEXT:    ld 3, -24(1)
16465; PWR7-NEXT:    ld 4, -32(1)
16466; PWR7-NEXT:    popcntd 3, 3
16467; PWR7-NEXT:    popcntd 4, 4
16468; PWR7-NEXT:    cmpldi 3, 18
16469; PWR7-NEXT:    iselgt 3, 6, 5
16470; PWR7-NEXT:    cmpldi 4, 18
16471; PWR7-NEXT:    iselgt 4, 6, 5
16472; PWR7-NEXT:    std 3, -8(1)
16473; PWR7-NEXT:    addi 3, 1, -16
16474; PWR7-NEXT:    std 4, -16(1)
16475; PWR7-NEXT:    lxvd2x 34, 0, 3
16476; PWR7-NEXT:    blr
16477;
16478; PWR8-LABEL: ugt_18_v2i64:
16479; PWR8:       # %bb.0:
16480; PWR8-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
16481; PWR8-NEXT:    vpopcntd 2, 2
16482; PWR8-NEXT:    addi 3, 3, .LCPI134_0@toc@l
16483; PWR8-NEXT:    lxvd2x 35, 0, 3
16484; PWR8-NEXT:    vcmpgtud 2, 2, 3
16485; PWR8-NEXT:    blr
16486;
16487; PWR9-LABEL: ugt_18_v2i64:
16488; PWR9:       # %bb.0:
16489; PWR9-NEXT:    addis 3, 2, .LCPI134_0@toc@ha
16490; PWR9-NEXT:    vpopcntd 2, 2
16491; PWR9-NEXT:    addi 3, 3, .LCPI134_0@toc@l
16492; PWR9-NEXT:    lxvx 35, 0, 3
16493; PWR9-NEXT:    vcmpgtud 2, 2, 3
16494; PWR9-NEXT:    blr
16495  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16496  %3 = icmp ugt <2 x i64> %2, <i64 18, i64 18>
16497  %4 = sext <2 x i1> %3 to <2 x i64>
16498  ret <2 x i64> %4
16499}
16500
16501define <2 x i64> @ult_19_v2i64(<2 x i64> %0) {
16502; PWR5-LABEL: ult_19_v2i64:
16503; PWR5:       # %bb.0:
16504; PWR5-NEXT:    lis 5, 21845
16505; PWR5-NEXT:    lis 6, 13107
16506; PWR5-NEXT:    ori 5, 5, 21845
16507; PWR5-NEXT:    rotldi 8, 4, 63
16508; PWR5-NEXT:    rotldi 9, 3, 63
16509; PWR5-NEXT:    rldimi 5, 5, 32, 0
16510; PWR5-NEXT:    and 8, 8, 5
16511; PWR5-NEXT:    and 5, 9, 5
16512; PWR5-NEXT:    ori 6, 6, 13107
16513; PWR5-NEXT:    sub 3, 3, 5
16514; PWR5-NEXT:    rldimi 6, 6, 32, 0
16515; PWR5-NEXT:    sub 4, 4, 8
16516; PWR5-NEXT:    and 8, 3, 6
16517; PWR5-NEXT:    rotldi 3, 3, 62
16518; PWR5-NEXT:    and 3, 3, 6
16519; PWR5-NEXT:    lis 7, 3855
16520; PWR5-NEXT:    and 5, 4, 6
16521; PWR5-NEXT:    rotldi 4, 4, 62
16522; PWR5-NEXT:    add 3, 8, 3
16523; PWR5-NEXT:    lis 9, 257
16524; PWR5-NEXT:    ori 7, 7, 3855
16525; PWR5-NEXT:    and 4, 4, 6
16526; PWR5-NEXT:    rldicl 6, 3, 60, 4
16527; PWR5-NEXT:    ori 9, 9, 257
16528; PWR5-NEXT:    rldimi 7, 7, 32, 0
16529; PWR5-NEXT:    add 4, 5, 4
16530; PWR5-NEXT:    add 3, 3, 6
16531; PWR5-NEXT:    rldimi 9, 9, 32, 0
16532; PWR5-NEXT:    rldicl 5, 4, 60, 4
16533; PWR5-NEXT:    and 3, 3, 7
16534; PWR5-NEXT:    add 4, 4, 5
16535; PWR5-NEXT:    mulld 3, 3, 9
16536; PWR5-NEXT:    and 4, 4, 7
16537; PWR5-NEXT:    rldicl 3, 3, 8, 56
16538; PWR5-NEXT:    li 5, 19
16539; PWR5-NEXT:    mulld 4, 4, 9
16540; PWR5-NEXT:    subc 6, 3, 5
16541; PWR5-NEXT:    rldicl 4, 4, 8, 56
16542; PWR5-NEXT:    subfe 3, 3, 3
16543; PWR5-NEXT:    subc 5, 4, 5
16544; PWR5-NEXT:    subfe 4, 4, 4
16545; PWR5-NEXT:    blr
16546;
16547; PWR6-LABEL: ult_19_v2i64:
16548; PWR6:       # %bb.0:
16549; PWR6-NEXT:    lis 5, 21845
16550; PWR6-NEXT:    lis 6, 13107
16551; PWR6-NEXT:    ori 5, 5, 21845
16552; PWR6-NEXT:    rotldi 8, 4, 63
16553; PWR6-NEXT:    rotldi 9, 3, 63
16554; PWR6-NEXT:    rldimi 5, 5, 32, 0
16555; PWR6-NEXT:    and 8, 8, 5
16556; PWR6-NEXT:    and 5, 9, 5
16557; PWR6-NEXT:    ori 6, 6, 13107
16558; PWR6-NEXT:    sub 3, 3, 5
16559; PWR6-NEXT:    rldimi 6, 6, 32, 0
16560; PWR6-NEXT:    sub 4, 4, 8
16561; PWR6-NEXT:    and 8, 3, 6
16562; PWR6-NEXT:    rotldi 3, 3, 62
16563; PWR6-NEXT:    and 3, 3, 6
16564; PWR6-NEXT:    lis 7, 3855
16565; PWR6-NEXT:    and 5, 4, 6
16566; PWR6-NEXT:    rotldi 4, 4, 62
16567; PWR6-NEXT:    add 3, 8, 3
16568; PWR6-NEXT:    lis 9, 257
16569; PWR6-NEXT:    ori 7, 7, 3855
16570; PWR6-NEXT:    and 4, 4, 6
16571; PWR6-NEXT:    rldicl 6, 3, 60, 4
16572; PWR6-NEXT:    ori 9, 9, 257
16573; PWR6-NEXT:    rldimi 7, 7, 32, 0
16574; PWR6-NEXT:    add 4, 5, 4
16575; PWR6-NEXT:    add 3, 3, 6
16576; PWR6-NEXT:    rldimi 9, 9, 32, 0
16577; PWR6-NEXT:    rldicl 5, 4, 60, 4
16578; PWR6-NEXT:    and 3, 3, 7
16579; PWR6-NEXT:    add 4, 4, 5
16580; PWR6-NEXT:    mulld 3, 3, 9
16581; PWR6-NEXT:    and 4, 4, 7
16582; PWR6-NEXT:    rldicl 3, 3, 8, 56
16583; PWR6-NEXT:    li 5, 19
16584; PWR6-NEXT:    mulld 4, 4, 9
16585; PWR6-NEXT:    subc 6, 3, 5
16586; PWR6-NEXT:    rldicl 4, 4, 8, 56
16587; PWR6-NEXT:    subfe 3, 3, 3
16588; PWR6-NEXT:    subc 5, 4, 5
16589; PWR6-NEXT:    subfe 4, 4, 4
16590; PWR6-NEXT:    blr
16591;
16592; PWR7-LABEL: ult_19_v2i64:
16593; PWR7:       # %bb.0:
16594; PWR7-NEXT:    addi 3, 1, -32
16595; PWR7-NEXT:    li 5, 0
16596; PWR7-NEXT:    li 6, -1
16597; PWR7-NEXT:    stxvd2x 34, 0, 3
16598; PWR7-NEXT:    ld 3, -24(1)
16599; PWR7-NEXT:    ld 4, -32(1)
16600; PWR7-NEXT:    popcntd 3, 3
16601; PWR7-NEXT:    popcntd 4, 4
16602; PWR7-NEXT:    cmpldi 3, 19
16603; PWR7-NEXT:    isellt 3, 6, 5
16604; PWR7-NEXT:    cmpldi 4, 19
16605; PWR7-NEXT:    isellt 4, 6, 5
16606; PWR7-NEXT:    std 3, -8(1)
16607; PWR7-NEXT:    addi 3, 1, -16
16608; PWR7-NEXT:    std 4, -16(1)
16609; PWR7-NEXT:    lxvd2x 34, 0, 3
16610; PWR7-NEXT:    blr
16611;
16612; PWR8-LABEL: ult_19_v2i64:
16613; PWR8:       # %bb.0:
16614; PWR8-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
16615; PWR8-NEXT:    vpopcntd 2, 2
16616; PWR8-NEXT:    addi 3, 3, .LCPI135_0@toc@l
16617; PWR8-NEXT:    lxvd2x 35, 0, 3
16618; PWR8-NEXT:    vcmpgtud 2, 3, 2
16619; PWR8-NEXT:    blr
16620;
16621; PWR9-LABEL: ult_19_v2i64:
16622; PWR9:       # %bb.0:
16623; PWR9-NEXT:    addis 3, 2, .LCPI135_0@toc@ha
16624; PWR9-NEXT:    vpopcntd 2, 2
16625; PWR9-NEXT:    addi 3, 3, .LCPI135_0@toc@l
16626; PWR9-NEXT:    lxvx 35, 0, 3
16627; PWR9-NEXT:    vcmpgtud 2, 3, 2
16628; PWR9-NEXT:    blr
16629  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16630  %3 = icmp ult <2 x i64> %2, <i64 19, i64 19>
16631  %4 = sext <2 x i1> %3 to <2 x i64>
16632  ret <2 x i64> %4
16633}
16634
16635define <2 x i64> @ugt_19_v2i64(<2 x i64> %0) {
16636; PWR5-LABEL: ugt_19_v2i64:
16637; PWR5:       # %bb.0:
16638; PWR5-NEXT:    lis 5, 21845
16639; PWR5-NEXT:    lis 6, 13107
16640; PWR5-NEXT:    ori 5, 5, 21845
16641; PWR5-NEXT:    rotldi 8, 4, 63
16642; PWR5-NEXT:    rotldi 9, 3, 63
16643; PWR5-NEXT:    rldimi 5, 5, 32, 0
16644; PWR5-NEXT:    and 8, 8, 5
16645; PWR5-NEXT:    and 5, 9, 5
16646; PWR5-NEXT:    ori 6, 6, 13107
16647; PWR5-NEXT:    sub 3, 3, 5
16648; PWR5-NEXT:    rldimi 6, 6, 32, 0
16649; PWR5-NEXT:    sub 4, 4, 8
16650; PWR5-NEXT:    and 8, 3, 6
16651; PWR5-NEXT:    rotldi 3, 3, 62
16652; PWR5-NEXT:    and 3, 3, 6
16653; PWR5-NEXT:    lis 7, 3855
16654; PWR5-NEXT:    and 5, 4, 6
16655; PWR5-NEXT:    rotldi 4, 4, 62
16656; PWR5-NEXT:    add 3, 8, 3
16657; PWR5-NEXT:    lis 9, 257
16658; PWR5-NEXT:    ori 7, 7, 3855
16659; PWR5-NEXT:    and 4, 4, 6
16660; PWR5-NEXT:    rldicl 6, 3, 60, 4
16661; PWR5-NEXT:    ori 9, 9, 257
16662; PWR5-NEXT:    rldimi 7, 7, 32, 0
16663; PWR5-NEXT:    add 4, 5, 4
16664; PWR5-NEXT:    add 3, 3, 6
16665; PWR5-NEXT:    rldimi 9, 9, 32, 0
16666; PWR5-NEXT:    rldicl 5, 4, 60, 4
16667; PWR5-NEXT:    and 3, 3, 7
16668; PWR5-NEXT:    add 4, 4, 5
16669; PWR5-NEXT:    mulld 3, 3, 9
16670; PWR5-NEXT:    and 4, 4, 7
16671; PWR5-NEXT:    rldicl 3, 3, 8, 56
16672; PWR5-NEXT:    mulld 4, 4, 9
16673; PWR5-NEXT:    li 5, 19
16674; PWR5-NEXT:    subfic 3, 3, 19
16675; PWR5-NEXT:    rldicl 4, 4, 8, 56
16676; PWR5-NEXT:    subfe 3, 5, 5
16677; PWR5-NEXT:    subfic 4, 4, 19
16678; PWR5-NEXT:    subfe 4, 5, 5
16679; PWR5-NEXT:    blr
16680;
16681; PWR6-LABEL: ugt_19_v2i64:
16682; PWR6:       # %bb.0:
16683; PWR6-NEXT:    lis 5, 21845
16684; PWR6-NEXT:    lis 6, 13107
16685; PWR6-NEXT:    ori 5, 5, 21845
16686; PWR6-NEXT:    rotldi 8, 4, 63
16687; PWR6-NEXT:    rotldi 9, 3, 63
16688; PWR6-NEXT:    rldimi 5, 5, 32, 0
16689; PWR6-NEXT:    and 8, 8, 5
16690; PWR6-NEXT:    and 5, 9, 5
16691; PWR6-NEXT:    ori 6, 6, 13107
16692; PWR6-NEXT:    sub 3, 3, 5
16693; PWR6-NEXT:    rldimi 6, 6, 32, 0
16694; PWR6-NEXT:    sub 4, 4, 8
16695; PWR6-NEXT:    and 8, 3, 6
16696; PWR6-NEXT:    rotldi 3, 3, 62
16697; PWR6-NEXT:    and 3, 3, 6
16698; PWR6-NEXT:    lis 7, 3855
16699; PWR6-NEXT:    and 5, 4, 6
16700; PWR6-NEXT:    rotldi 4, 4, 62
16701; PWR6-NEXT:    add 3, 8, 3
16702; PWR6-NEXT:    lis 9, 257
16703; PWR6-NEXT:    ori 7, 7, 3855
16704; PWR6-NEXT:    and 4, 4, 6
16705; PWR6-NEXT:    rldicl 6, 3, 60, 4
16706; PWR6-NEXT:    ori 9, 9, 257
16707; PWR6-NEXT:    rldimi 7, 7, 32, 0
16708; PWR6-NEXT:    add 4, 5, 4
16709; PWR6-NEXT:    add 3, 3, 6
16710; PWR6-NEXT:    rldimi 9, 9, 32, 0
16711; PWR6-NEXT:    rldicl 5, 4, 60, 4
16712; PWR6-NEXT:    and 3, 3, 7
16713; PWR6-NEXT:    add 4, 4, 5
16714; PWR6-NEXT:    mulld 3, 3, 9
16715; PWR6-NEXT:    and 4, 4, 7
16716; PWR6-NEXT:    rldicl 3, 3, 8, 56
16717; PWR6-NEXT:    mulld 4, 4, 9
16718; PWR6-NEXT:    li 5, 19
16719; PWR6-NEXT:    subfic 3, 3, 19
16720; PWR6-NEXT:    rldicl 4, 4, 8, 56
16721; PWR6-NEXT:    subfe 3, 5, 5
16722; PWR6-NEXT:    subfic 4, 4, 19
16723; PWR6-NEXT:    subfe 4, 5, 5
16724; PWR6-NEXT:    blr
16725;
16726; PWR7-LABEL: ugt_19_v2i64:
16727; PWR7:       # %bb.0:
16728; PWR7-NEXT:    addi 3, 1, -32
16729; PWR7-NEXT:    li 5, 0
16730; PWR7-NEXT:    li 6, -1
16731; PWR7-NEXT:    stxvd2x 34, 0, 3
16732; PWR7-NEXT:    ld 3, -24(1)
16733; PWR7-NEXT:    ld 4, -32(1)
16734; PWR7-NEXT:    popcntd 3, 3
16735; PWR7-NEXT:    popcntd 4, 4
16736; PWR7-NEXT:    cmpldi 3, 19
16737; PWR7-NEXT:    iselgt 3, 6, 5
16738; PWR7-NEXT:    cmpldi 4, 19
16739; PWR7-NEXT:    iselgt 4, 6, 5
16740; PWR7-NEXT:    std 3, -8(1)
16741; PWR7-NEXT:    addi 3, 1, -16
16742; PWR7-NEXT:    std 4, -16(1)
16743; PWR7-NEXT:    lxvd2x 34, 0, 3
16744; PWR7-NEXT:    blr
16745;
16746; PWR8-LABEL: ugt_19_v2i64:
16747; PWR8:       # %bb.0:
16748; PWR8-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
16749; PWR8-NEXT:    vpopcntd 2, 2
16750; PWR8-NEXT:    addi 3, 3, .LCPI136_0@toc@l
16751; PWR8-NEXT:    lxvd2x 35, 0, 3
16752; PWR8-NEXT:    vcmpgtud 2, 2, 3
16753; PWR8-NEXT:    blr
16754;
16755; PWR9-LABEL: ugt_19_v2i64:
16756; PWR9:       # %bb.0:
16757; PWR9-NEXT:    addis 3, 2, .LCPI136_0@toc@ha
16758; PWR9-NEXT:    vpopcntd 2, 2
16759; PWR9-NEXT:    addi 3, 3, .LCPI136_0@toc@l
16760; PWR9-NEXT:    lxvx 35, 0, 3
16761; PWR9-NEXT:    vcmpgtud 2, 2, 3
16762; PWR9-NEXT:    blr
16763  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16764  %3 = icmp ugt <2 x i64> %2, <i64 19, i64 19>
16765  %4 = sext <2 x i1> %3 to <2 x i64>
16766  ret <2 x i64> %4
16767}
16768
16769define <2 x i64> @ult_20_v2i64(<2 x i64> %0) {
16770; PWR5-LABEL: ult_20_v2i64:
16771; PWR5:       # %bb.0:
16772; PWR5-NEXT:    lis 5, 21845
16773; PWR5-NEXT:    lis 6, 13107
16774; PWR5-NEXT:    ori 5, 5, 21845
16775; PWR5-NEXT:    rotldi 8, 4, 63
16776; PWR5-NEXT:    rotldi 9, 3, 63
16777; PWR5-NEXT:    rldimi 5, 5, 32, 0
16778; PWR5-NEXT:    and 8, 8, 5
16779; PWR5-NEXT:    and 5, 9, 5
16780; PWR5-NEXT:    ori 6, 6, 13107
16781; PWR5-NEXT:    sub 3, 3, 5
16782; PWR5-NEXT:    rldimi 6, 6, 32, 0
16783; PWR5-NEXT:    sub 4, 4, 8
16784; PWR5-NEXT:    and 8, 3, 6
16785; PWR5-NEXT:    rotldi 3, 3, 62
16786; PWR5-NEXT:    and 3, 3, 6
16787; PWR5-NEXT:    lis 7, 3855
16788; PWR5-NEXT:    and 5, 4, 6
16789; PWR5-NEXT:    rotldi 4, 4, 62
16790; PWR5-NEXT:    add 3, 8, 3
16791; PWR5-NEXT:    lis 9, 257
16792; PWR5-NEXT:    ori 7, 7, 3855
16793; PWR5-NEXT:    and 4, 4, 6
16794; PWR5-NEXT:    rldicl 6, 3, 60, 4
16795; PWR5-NEXT:    ori 9, 9, 257
16796; PWR5-NEXT:    rldimi 7, 7, 32, 0
16797; PWR5-NEXT:    add 4, 5, 4
16798; PWR5-NEXT:    add 3, 3, 6
16799; PWR5-NEXT:    rldimi 9, 9, 32, 0
16800; PWR5-NEXT:    rldicl 5, 4, 60, 4
16801; PWR5-NEXT:    and 3, 3, 7
16802; PWR5-NEXT:    add 4, 4, 5
16803; PWR5-NEXT:    mulld 3, 3, 9
16804; PWR5-NEXT:    and 4, 4, 7
16805; PWR5-NEXT:    rldicl 3, 3, 8, 56
16806; PWR5-NEXT:    li 5, 20
16807; PWR5-NEXT:    mulld 4, 4, 9
16808; PWR5-NEXT:    subc 6, 3, 5
16809; PWR5-NEXT:    rldicl 4, 4, 8, 56
16810; PWR5-NEXT:    subfe 3, 3, 3
16811; PWR5-NEXT:    subc 5, 4, 5
16812; PWR5-NEXT:    subfe 4, 4, 4
16813; PWR5-NEXT:    blr
16814;
16815; PWR6-LABEL: ult_20_v2i64:
16816; PWR6:       # %bb.0:
16817; PWR6-NEXT:    lis 5, 21845
16818; PWR6-NEXT:    lis 6, 13107
16819; PWR6-NEXT:    ori 5, 5, 21845
16820; PWR6-NEXT:    rotldi 8, 4, 63
16821; PWR6-NEXT:    rotldi 9, 3, 63
16822; PWR6-NEXT:    rldimi 5, 5, 32, 0
16823; PWR6-NEXT:    and 8, 8, 5
16824; PWR6-NEXT:    and 5, 9, 5
16825; PWR6-NEXT:    ori 6, 6, 13107
16826; PWR6-NEXT:    sub 3, 3, 5
16827; PWR6-NEXT:    rldimi 6, 6, 32, 0
16828; PWR6-NEXT:    sub 4, 4, 8
16829; PWR6-NEXT:    and 8, 3, 6
16830; PWR6-NEXT:    rotldi 3, 3, 62
16831; PWR6-NEXT:    and 3, 3, 6
16832; PWR6-NEXT:    lis 7, 3855
16833; PWR6-NEXT:    and 5, 4, 6
16834; PWR6-NEXT:    rotldi 4, 4, 62
16835; PWR6-NEXT:    add 3, 8, 3
16836; PWR6-NEXT:    lis 9, 257
16837; PWR6-NEXT:    ori 7, 7, 3855
16838; PWR6-NEXT:    and 4, 4, 6
16839; PWR6-NEXT:    rldicl 6, 3, 60, 4
16840; PWR6-NEXT:    ori 9, 9, 257
16841; PWR6-NEXT:    rldimi 7, 7, 32, 0
16842; PWR6-NEXT:    add 4, 5, 4
16843; PWR6-NEXT:    add 3, 3, 6
16844; PWR6-NEXT:    rldimi 9, 9, 32, 0
16845; PWR6-NEXT:    rldicl 5, 4, 60, 4
16846; PWR6-NEXT:    and 3, 3, 7
16847; PWR6-NEXT:    add 4, 4, 5
16848; PWR6-NEXT:    mulld 3, 3, 9
16849; PWR6-NEXT:    and 4, 4, 7
16850; PWR6-NEXT:    rldicl 3, 3, 8, 56
16851; PWR6-NEXT:    li 5, 20
16852; PWR6-NEXT:    mulld 4, 4, 9
16853; PWR6-NEXT:    subc 6, 3, 5
16854; PWR6-NEXT:    rldicl 4, 4, 8, 56
16855; PWR6-NEXT:    subfe 3, 3, 3
16856; PWR6-NEXT:    subc 5, 4, 5
16857; PWR6-NEXT:    subfe 4, 4, 4
16858; PWR6-NEXT:    blr
16859;
16860; PWR7-LABEL: ult_20_v2i64:
16861; PWR7:       # %bb.0:
16862; PWR7-NEXT:    addi 3, 1, -32
16863; PWR7-NEXT:    li 5, 0
16864; PWR7-NEXT:    li 6, -1
16865; PWR7-NEXT:    stxvd2x 34, 0, 3
16866; PWR7-NEXT:    ld 3, -24(1)
16867; PWR7-NEXT:    ld 4, -32(1)
16868; PWR7-NEXT:    popcntd 3, 3
16869; PWR7-NEXT:    popcntd 4, 4
16870; PWR7-NEXT:    cmpldi 3, 20
16871; PWR7-NEXT:    isellt 3, 6, 5
16872; PWR7-NEXT:    cmpldi 4, 20
16873; PWR7-NEXT:    isellt 4, 6, 5
16874; PWR7-NEXT:    std 3, -8(1)
16875; PWR7-NEXT:    addi 3, 1, -16
16876; PWR7-NEXT:    std 4, -16(1)
16877; PWR7-NEXT:    lxvd2x 34, 0, 3
16878; PWR7-NEXT:    blr
16879;
16880; PWR8-LABEL: ult_20_v2i64:
16881; PWR8:       # %bb.0:
16882; PWR8-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
16883; PWR8-NEXT:    vpopcntd 2, 2
16884; PWR8-NEXT:    addi 3, 3, .LCPI137_0@toc@l
16885; PWR8-NEXT:    lxvd2x 35, 0, 3
16886; PWR8-NEXT:    vcmpgtud 2, 3, 2
16887; PWR8-NEXT:    blr
16888;
16889; PWR9-LABEL: ult_20_v2i64:
16890; PWR9:       # %bb.0:
16891; PWR9-NEXT:    addis 3, 2, .LCPI137_0@toc@ha
16892; PWR9-NEXT:    vpopcntd 2, 2
16893; PWR9-NEXT:    addi 3, 3, .LCPI137_0@toc@l
16894; PWR9-NEXT:    lxvx 35, 0, 3
16895; PWR9-NEXT:    vcmpgtud 2, 3, 2
16896; PWR9-NEXT:    blr
16897  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
16898  %3 = icmp ult <2 x i64> %2, <i64 20, i64 20>
16899  %4 = sext <2 x i1> %3 to <2 x i64>
16900  ret <2 x i64> %4
16901}
16902
16903define <2 x i64> @ugt_20_v2i64(<2 x i64> %0) {
16904; PWR5-LABEL: ugt_20_v2i64:
16905; PWR5:       # %bb.0:
16906; PWR5-NEXT:    lis 5, 21845
16907; PWR5-NEXT:    lis 6, 13107
16908; PWR5-NEXT:    ori 5, 5, 21845
16909; PWR5-NEXT:    rotldi 8, 4, 63
16910; PWR5-NEXT:    rotldi 9, 3, 63
16911; PWR5-NEXT:    rldimi 5, 5, 32, 0
16912; PWR5-NEXT:    and 8, 8, 5
16913; PWR5-NEXT:    and 5, 9, 5
16914; PWR5-NEXT:    ori 6, 6, 13107
16915; PWR5-NEXT:    sub 3, 3, 5
16916; PWR5-NEXT:    rldimi 6, 6, 32, 0
16917; PWR5-NEXT:    sub 4, 4, 8
16918; PWR5-NEXT:    and 8, 3, 6
16919; PWR5-NEXT:    rotldi 3, 3, 62
16920; PWR5-NEXT:    and 3, 3, 6
16921; PWR5-NEXT:    lis 7, 3855
16922; PWR5-NEXT:    and 5, 4, 6
16923; PWR5-NEXT:    rotldi 4, 4, 62
16924; PWR5-NEXT:    add 3, 8, 3
16925; PWR5-NEXT:    lis 9, 257
16926; PWR5-NEXT:    ori 7, 7, 3855
16927; PWR5-NEXT:    and 4, 4, 6
16928; PWR5-NEXT:    rldicl 6, 3, 60, 4
16929; PWR5-NEXT:    ori 9, 9, 257
16930; PWR5-NEXT:    rldimi 7, 7, 32, 0
16931; PWR5-NEXT:    add 4, 5, 4
16932; PWR5-NEXT:    add 3, 3, 6
16933; PWR5-NEXT:    rldimi 9, 9, 32, 0
16934; PWR5-NEXT:    rldicl 5, 4, 60, 4
16935; PWR5-NEXT:    and 3, 3, 7
16936; PWR5-NEXT:    add 4, 4, 5
16937; PWR5-NEXT:    mulld 3, 3, 9
16938; PWR5-NEXT:    and 4, 4, 7
16939; PWR5-NEXT:    rldicl 3, 3, 8, 56
16940; PWR5-NEXT:    mulld 4, 4, 9
16941; PWR5-NEXT:    li 5, 20
16942; PWR5-NEXT:    subfic 3, 3, 20
16943; PWR5-NEXT:    rldicl 4, 4, 8, 56
16944; PWR5-NEXT:    subfe 3, 5, 5
16945; PWR5-NEXT:    subfic 4, 4, 20
16946; PWR5-NEXT:    subfe 4, 5, 5
16947; PWR5-NEXT:    blr
16948;
16949; PWR6-LABEL: ugt_20_v2i64:
16950; PWR6:       # %bb.0:
16951; PWR6-NEXT:    lis 5, 21845
16952; PWR6-NEXT:    lis 6, 13107
16953; PWR6-NEXT:    ori 5, 5, 21845
16954; PWR6-NEXT:    rotldi 8, 4, 63
16955; PWR6-NEXT:    rotldi 9, 3, 63
16956; PWR6-NEXT:    rldimi 5, 5, 32, 0
16957; PWR6-NEXT:    and 8, 8, 5
16958; PWR6-NEXT:    and 5, 9, 5
16959; PWR6-NEXT:    ori 6, 6, 13107
16960; PWR6-NEXT:    sub 3, 3, 5
16961; PWR6-NEXT:    rldimi 6, 6, 32, 0
16962; PWR6-NEXT:    sub 4, 4, 8
16963; PWR6-NEXT:    and 8, 3, 6
16964; PWR6-NEXT:    rotldi 3, 3, 62
16965; PWR6-NEXT:    and 3, 3, 6
16966; PWR6-NEXT:    lis 7, 3855
16967; PWR6-NEXT:    and 5, 4, 6
16968; PWR6-NEXT:    rotldi 4, 4, 62
16969; PWR6-NEXT:    add 3, 8, 3
16970; PWR6-NEXT:    lis 9, 257
16971; PWR6-NEXT:    ori 7, 7, 3855
16972; PWR6-NEXT:    and 4, 4, 6
16973; PWR6-NEXT:    rldicl 6, 3, 60, 4
16974; PWR6-NEXT:    ori 9, 9, 257
16975; PWR6-NEXT:    rldimi 7, 7, 32, 0
16976; PWR6-NEXT:    add 4, 5, 4
16977; PWR6-NEXT:    add 3, 3, 6
16978; PWR6-NEXT:    rldimi 9, 9, 32, 0
16979; PWR6-NEXT:    rldicl 5, 4, 60, 4
16980; PWR6-NEXT:    and 3, 3, 7
16981; PWR6-NEXT:    add 4, 4, 5
16982; PWR6-NEXT:    mulld 3, 3, 9
16983; PWR6-NEXT:    and 4, 4, 7
16984; PWR6-NEXT:    rldicl 3, 3, 8, 56
16985; PWR6-NEXT:    mulld 4, 4, 9
16986; PWR6-NEXT:    li 5, 20
16987; PWR6-NEXT:    subfic 3, 3, 20
16988; PWR6-NEXT:    rldicl 4, 4, 8, 56
16989; PWR6-NEXT:    subfe 3, 5, 5
16990; PWR6-NEXT:    subfic 4, 4, 20
16991; PWR6-NEXT:    subfe 4, 5, 5
16992; PWR6-NEXT:    blr
16993;
16994; PWR7-LABEL: ugt_20_v2i64:
16995; PWR7:       # %bb.0:
16996; PWR7-NEXT:    addi 3, 1, -32
16997; PWR7-NEXT:    li 5, 0
16998; PWR7-NEXT:    li 6, -1
16999; PWR7-NEXT:    stxvd2x 34, 0, 3
17000; PWR7-NEXT:    ld 3, -24(1)
17001; PWR7-NEXT:    ld 4, -32(1)
17002; PWR7-NEXT:    popcntd 3, 3
17003; PWR7-NEXT:    popcntd 4, 4
17004; PWR7-NEXT:    cmpldi 3, 20
17005; PWR7-NEXT:    iselgt 3, 6, 5
17006; PWR7-NEXT:    cmpldi 4, 20
17007; PWR7-NEXT:    iselgt 4, 6, 5
17008; PWR7-NEXT:    std 3, -8(1)
17009; PWR7-NEXT:    addi 3, 1, -16
17010; PWR7-NEXT:    std 4, -16(1)
17011; PWR7-NEXT:    lxvd2x 34, 0, 3
17012; PWR7-NEXT:    blr
17013;
17014; PWR8-LABEL: ugt_20_v2i64:
17015; PWR8:       # %bb.0:
17016; PWR8-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
17017; PWR8-NEXT:    vpopcntd 2, 2
17018; PWR8-NEXT:    addi 3, 3, .LCPI138_0@toc@l
17019; PWR8-NEXT:    lxvd2x 35, 0, 3
17020; PWR8-NEXT:    vcmpgtud 2, 2, 3
17021; PWR8-NEXT:    blr
17022;
17023; PWR9-LABEL: ugt_20_v2i64:
17024; PWR9:       # %bb.0:
17025; PWR9-NEXT:    addis 3, 2, .LCPI138_0@toc@ha
17026; PWR9-NEXT:    vpopcntd 2, 2
17027; PWR9-NEXT:    addi 3, 3, .LCPI138_0@toc@l
17028; PWR9-NEXT:    lxvx 35, 0, 3
17029; PWR9-NEXT:    vcmpgtud 2, 2, 3
17030; PWR9-NEXT:    blr
17031  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17032  %3 = icmp ugt <2 x i64> %2, <i64 20, i64 20>
17033  %4 = sext <2 x i1> %3 to <2 x i64>
17034  ret <2 x i64> %4
17035}
17036
17037define <2 x i64> @ult_21_v2i64(<2 x i64> %0) {
17038; PWR5-LABEL: ult_21_v2i64:
17039; PWR5:       # %bb.0:
17040; PWR5-NEXT:    lis 5, 21845
17041; PWR5-NEXT:    lis 6, 13107
17042; PWR5-NEXT:    ori 5, 5, 21845
17043; PWR5-NEXT:    rotldi 8, 4, 63
17044; PWR5-NEXT:    rotldi 9, 3, 63
17045; PWR5-NEXT:    rldimi 5, 5, 32, 0
17046; PWR5-NEXT:    and 8, 8, 5
17047; PWR5-NEXT:    and 5, 9, 5
17048; PWR5-NEXT:    ori 6, 6, 13107
17049; PWR5-NEXT:    sub 3, 3, 5
17050; PWR5-NEXT:    rldimi 6, 6, 32, 0
17051; PWR5-NEXT:    sub 4, 4, 8
17052; PWR5-NEXT:    and 8, 3, 6
17053; PWR5-NEXT:    rotldi 3, 3, 62
17054; PWR5-NEXT:    and 3, 3, 6
17055; PWR5-NEXT:    lis 7, 3855
17056; PWR5-NEXT:    and 5, 4, 6
17057; PWR5-NEXT:    rotldi 4, 4, 62
17058; PWR5-NEXT:    add 3, 8, 3
17059; PWR5-NEXT:    lis 9, 257
17060; PWR5-NEXT:    ori 7, 7, 3855
17061; PWR5-NEXT:    and 4, 4, 6
17062; PWR5-NEXT:    rldicl 6, 3, 60, 4
17063; PWR5-NEXT:    ori 9, 9, 257
17064; PWR5-NEXT:    rldimi 7, 7, 32, 0
17065; PWR5-NEXT:    add 4, 5, 4
17066; PWR5-NEXT:    add 3, 3, 6
17067; PWR5-NEXT:    rldimi 9, 9, 32, 0
17068; PWR5-NEXT:    rldicl 5, 4, 60, 4
17069; PWR5-NEXT:    and 3, 3, 7
17070; PWR5-NEXT:    add 4, 4, 5
17071; PWR5-NEXT:    mulld 3, 3, 9
17072; PWR5-NEXT:    and 4, 4, 7
17073; PWR5-NEXT:    rldicl 3, 3, 8, 56
17074; PWR5-NEXT:    li 5, 21
17075; PWR5-NEXT:    mulld 4, 4, 9
17076; PWR5-NEXT:    subc 6, 3, 5
17077; PWR5-NEXT:    rldicl 4, 4, 8, 56
17078; PWR5-NEXT:    subfe 3, 3, 3
17079; PWR5-NEXT:    subc 5, 4, 5
17080; PWR5-NEXT:    subfe 4, 4, 4
17081; PWR5-NEXT:    blr
17082;
17083; PWR6-LABEL: ult_21_v2i64:
17084; PWR6:       # %bb.0:
17085; PWR6-NEXT:    lis 5, 21845
17086; PWR6-NEXT:    lis 6, 13107
17087; PWR6-NEXT:    ori 5, 5, 21845
17088; PWR6-NEXT:    rotldi 8, 4, 63
17089; PWR6-NEXT:    rotldi 9, 3, 63
17090; PWR6-NEXT:    rldimi 5, 5, 32, 0
17091; PWR6-NEXT:    and 8, 8, 5
17092; PWR6-NEXT:    and 5, 9, 5
17093; PWR6-NEXT:    ori 6, 6, 13107
17094; PWR6-NEXT:    sub 3, 3, 5
17095; PWR6-NEXT:    rldimi 6, 6, 32, 0
17096; PWR6-NEXT:    sub 4, 4, 8
17097; PWR6-NEXT:    and 8, 3, 6
17098; PWR6-NEXT:    rotldi 3, 3, 62
17099; PWR6-NEXT:    and 3, 3, 6
17100; PWR6-NEXT:    lis 7, 3855
17101; PWR6-NEXT:    and 5, 4, 6
17102; PWR6-NEXT:    rotldi 4, 4, 62
17103; PWR6-NEXT:    add 3, 8, 3
17104; PWR6-NEXT:    lis 9, 257
17105; PWR6-NEXT:    ori 7, 7, 3855
17106; PWR6-NEXT:    and 4, 4, 6
17107; PWR6-NEXT:    rldicl 6, 3, 60, 4
17108; PWR6-NEXT:    ori 9, 9, 257
17109; PWR6-NEXT:    rldimi 7, 7, 32, 0
17110; PWR6-NEXT:    add 4, 5, 4
17111; PWR6-NEXT:    add 3, 3, 6
17112; PWR6-NEXT:    rldimi 9, 9, 32, 0
17113; PWR6-NEXT:    rldicl 5, 4, 60, 4
17114; PWR6-NEXT:    and 3, 3, 7
17115; PWR6-NEXT:    add 4, 4, 5
17116; PWR6-NEXT:    mulld 3, 3, 9
17117; PWR6-NEXT:    and 4, 4, 7
17118; PWR6-NEXT:    rldicl 3, 3, 8, 56
17119; PWR6-NEXT:    li 5, 21
17120; PWR6-NEXT:    mulld 4, 4, 9
17121; PWR6-NEXT:    subc 6, 3, 5
17122; PWR6-NEXT:    rldicl 4, 4, 8, 56
17123; PWR6-NEXT:    subfe 3, 3, 3
17124; PWR6-NEXT:    subc 5, 4, 5
17125; PWR6-NEXT:    subfe 4, 4, 4
17126; PWR6-NEXT:    blr
17127;
17128; PWR7-LABEL: ult_21_v2i64:
17129; PWR7:       # %bb.0:
17130; PWR7-NEXT:    addi 3, 1, -32
17131; PWR7-NEXT:    li 5, 0
17132; PWR7-NEXT:    li 6, -1
17133; PWR7-NEXT:    stxvd2x 34, 0, 3
17134; PWR7-NEXT:    ld 3, -24(1)
17135; PWR7-NEXT:    ld 4, -32(1)
17136; PWR7-NEXT:    popcntd 3, 3
17137; PWR7-NEXT:    popcntd 4, 4
17138; PWR7-NEXT:    cmpldi 3, 21
17139; PWR7-NEXT:    isellt 3, 6, 5
17140; PWR7-NEXT:    cmpldi 4, 21
17141; PWR7-NEXT:    isellt 4, 6, 5
17142; PWR7-NEXT:    std 3, -8(1)
17143; PWR7-NEXT:    addi 3, 1, -16
17144; PWR7-NEXT:    std 4, -16(1)
17145; PWR7-NEXT:    lxvd2x 34, 0, 3
17146; PWR7-NEXT:    blr
17147;
17148; PWR8-LABEL: ult_21_v2i64:
17149; PWR8:       # %bb.0:
17150; PWR8-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
17151; PWR8-NEXT:    vpopcntd 2, 2
17152; PWR8-NEXT:    addi 3, 3, .LCPI139_0@toc@l
17153; PWR8-NEXT:    lxvd2x 35, 0, 3
17154; PWR8-NEXT:    vcmpgtud 2, 3, 2
17155; PWR8-NEXT:    blr
17156;
17157; PWR9-LABEL: ult_21_v2i64:
17158; PWR9:       # %bb.0:
17159; PWR9-NEXT:    addis 3, 2, .LCPI139_0@toc@ha
17160; PWR9-NEXT:    vpopcntd 2, 2
17161; PWR9-NEXT:    addi 3, 3, .LCPI139_0@toc@l
17162; PWR9-NEXT:    lxvx 35, 0, 3
17163; PWR9-NEXT:    vcmpgtud 2, 3, 2
17164; PWR9-NEXT:    blr
17165  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17166  %3 = icmp ult <2 x i64> %2, <i64 21, i64 21>
17167  %4 = sext <2 x i1> %3 to <2 x i64>
17168  ret <2 x i64> %4
17169}
17170
17171define <2 x i64> @ugt_21_v2i64(<2 x i64> %0) {
17172; PWR5-LABEL: ugt_21_v2i64:
17173; PWR5:       # %bb.0:
17174; PWR5-NEXT:    lis 5, 21845
17175; PWR5-NEXT:    lis 6, 13107
17176; PWR5-NEXT:    ori 5, 5, 21845
17177; PWR5-NEXT:    rotldi 8, 4, 63
17178; PWR5-NEXT:    rotldi 9, 3, 63
17179; PWR5-NEXT:    rldimi 5, 5, 32, 0
17180; PWR5-NEXT:    and 8, 8, 5
17181; PWR5-NEXT:    and 5, 9, 5
17182; PWR5-NEXT:    ori 6, 6, 13107
17183; PWR5-NEXT:    sub 3, 3, 5
17184; PWR5-NEXT:    rldimi 6, 6, 32, 0
17185; PWR5-NEXT:    sub 4, 4, 8
17186; PWR5-NEXT:    and 8, 3, 6
17187; PWR5-NEXT:    rotldi 3, 3, 62
17188; PWR5-NEXT:    and 3, 3, 6
17189; PWR5-NEXT:    lis 7, 3855
17190; PWR5-NEXT:    and 5, 4, 6
17191; PWR5-NEXT:    rotldi 4, 4, 62
17192; PWR5-NEXT:    add 3, 8, 3
17193; PWR5-NEXT:    lis 9, 257
17194; PWR5-NEXT:    ori 7, 7, 3855
17195; PWR5-NEXT:    and 4, 4, 6
17196; PWR5-NEXT:    rldicl 6, 3, 60, 4
17197; PWR5-NEXT:    ori 9, 9, 257
17198; PWR5-NEXT:    rldimi 7, 7, 32, 0
17199; PWR5-NEXT:    add 4, 5, 4
17200; PWR5-NEXT:    add 3, 3, 6
17201; PWR5-NEXT:    rldimi 9, 9, 32, 0
17202; PWR5-NEXT:    rldicl 5, 4, 60, 4
17203; PWR5-NEXT:    and 3, 3, 7
17204; PWR5-NEXT:    add 4, 4, 5
17205; PWR5-NEXT:    mulld 3, 3, 9
17206; PWR5-NEXT:    and 4, 4, 7
17207; PWR5-NEXT:    rldicl 3, 3, 8, 56
17208; PWR5-NEXT:    mulld 4, 4, 9
17209; PWR5-NEXT:    li 5, 21
17210; PWR5-NEXT:    subfic 3, 3, 21
17211; PWR5-NEXT:    rldicl 4, 4, 8, 56
17212; PWR5-NEXT:    subfe 3, 5, 5
17213; PWR5-NEXT:    subfic 4, 4, 21
17214; PWR5-NEXT:    subfe 4, 5, 5
17215; PWR5-NEXT:    blr
17216;
17217; PWR6-LABEL: ugt_21_v2i64:
17218; PWR6:       # %bb.0:
17219; PWR6-NEXT:    lis 5, 21845
17220; PWR6-NEXT:    lis 6, 13107
17221; PWR6-NEXT:    ori 5, 5, 21845
17222; PWR6-NEXT:    rotldi 8, 4, 63
17223; PWR6-NEXT:    rotldi 9, 3, 63
17224; PWR6-NEXT:    rldimi 5, 5, 32, 0
17225; PWR6-NEXT:    and 8, 8, 5
17226; PWR6-NEXT:    and 5, 9, 5
17227; PWR6-NEXT:    ori 6, 6, 13107
17228; PWR6-NEXT:    sub 3, 3, 5
17229; PWR6-NEXT:    rldimi 6, 6, 32, 0
17230; PWR6-NEXT:    sub 4, 4, 8
17231; PWR6-NEXT:    and 8, 3, 6
17232; PWR6-NEXT:    rotldi 3, 3, 62
17233; PWR6-NEXT:    and 3, 3, 6
17234; PWR6-NEXT:    lis 7, 3855
17235; PWR6-NEXT:    and 5, 4, 6
17236; PWR6-NEXT:    rotldi 4, 4, 62
17237; PWR6-NEXT:    add 3, 8, 3
17238; PWR6-NEXT:    lis 9, 257
17239; PWR6-NEXT:    ori 7, 7, 3855
17240; PWR6-NEXT:    and 4, 4, 6
17241; PWR6-NEXT:    rldicl 6, 3, 60, 4
17242; PWR6-NEXT:    ori 9, 9, 257
17243; PWR6-NEXT:    rldimi 7, 7, 32, 0
17244; PWR6-NEXT:    add 4, 5, 4
17245; PWR6-NEXT:    add 3, 3, 6
17246; PWR6-NEXT:    rldimi 9, 9, 32, 0
17247; PWR6-NEXT:    rldicl 5, 4, 60, 4
17248; PWR6-NEXT:    and 3, 3, 7
17249; PWR6-NEXT:    add 4, 4, 5
17250; PWR6-NEXT:    mulld 3, 3, 9
17251; PWR6-NEXT:    and 4, 4, 7
17252; PWR6-NEXT:    rldicl 3, 3, 8, 56
17253; PWR6-NEXT:    mulld 4, 4, 9
17254; PWR6-NEXT:    li 5, 21
17255; PWR6-NEXT:    subfic 3, 3, 21
17256; PWR6-NEXT:    rldicl 4, 4, 8, 56
17257; PWR6-NEXT:    subfe 3, 5, 5
17258; PWR6-NEXT:    subfic 4, 4, 21
17259; PWR6-NEXT:    subfe 4, 5, 5
17260; PWR6-NEXT:    blr
17261;
17262; PWR7-LABEL: ugt_21_v2i64:
17263; PWR7:       # %bb.0:
17264; PWR7-NEXT:    addi 3, 1, -32
17265; PWR7-NEXT:    li 5, 0
17266; PWR7-NEXT:    li 6, -1
17267; PWR7-NEXT:    stxvd2x 34, 0, 3
17268; PWR7-NEXT:    ld 3, -24(1)
17269; PWR7-NEXT:    ld 4, -32(1)
17270; PWR7-NEXT:    popcntd 3, 3
17271; PWR7-NEXT:    popcntd 4, 4
17272; PWR7-NEXT:    cmpldi 3, 21
17273; PWR7-NEXT:    iselgt 3, 6, 5
17274; PWR7-NEXT:    cmpldi 4, 21
17275; PWR7-NEXT:    iselgt 4, 6, 5
17276; PWR7-NEXT:    std 3, -8(1)
17277; PWR7-NEXT:    addi 3, 1, -16
17278; PWR7-NEXT:    std 4, -16(1)
17279; PWR7-NEXT:    lxvd2x 34, 0, 3
17280; PWR7-NEXT:    blr
17281;
17282; PWR8-LABEL: ugt_21_v2i64:
17283; PWR8:       # %bb.0:
17284; PWR8-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
17285; PWR8-NEXT:    vpopcntd 2, 2
17286; PWR8-NEXT:    addi 3, 3, .LCPI140_0@toc@l
17287; PWR8-NEXT:    lxvd2x 35, 0, 3
17288; PWR8-NEXT:    vcmpgtud 2, 2, 3
17289; PWR8-NEXT:    blr
17290;
17291; PWR9-LABEL: ugt_21_v2i64:
17292; PWR9:       # %bb.0:
17293; PWR9-NEXT:    addis 3, 2, .LCPI140_0@toc@ha
17294; PWR9-NEXT:    vpopcntd 2, 2
17295; PWR9-NEXT:    addi 3, 3, .LCPI140_0@toc@l
17296; PWR9-NEXT:    lxvx 35, 0, 3
17297; PWR9-NEXT:    vcmpgtud 2, 2, 3
17298; PWR9-NEXT:    blr
17299  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17300  %3 = icmp ugt <2 x i64> %2, <i64 21, i64 21>
17301  %4 = sext <2 x i1> %3 to <2 x i64>
17302  ret <2 x i64> %4
17303}
17304
17305define <2 x i64> @ult_22_v2i64(<2 x i64> %0) {
17306; PWR5-LABEL: ult_22_v2i64:
17307; PWR5:       # %bb.0:
17308; PWR5-NEXT:    lis 5, 21845
17309; PWR5-NEXT:    lis 6, 13107
17310; PWR5-NEXT:    ori 5, 5, 21845
17311; PWR5-NEXT:    rotldi 8, 4, 63
17312; PWR5-NEXT:    rotldi 9, 3, 63
17313; PWR5-NEXT:    rldimi 5, 5, 32, 0
17314; PWR5-NEXT:    and 8, 8, 5
17315; PWR5-NEXT:    and 5, 9, 5
17316; PWR5-NEXT:    ori 6, 6, 13107
17317; PWR5-NEXT:    sub 3, 3, 5
17318; PWR5-NEXT:    rldimi 6, 6, 32, 0
17319; PWR5-NEXT:    sub 4, 4, 8
17320; PWR5-NEXT:    and 8, 3, 6
17321; PWR5-NEXT:    rotldi 3, 3, 62
17322; PWR5-NEXT:    and 3, 3, 6
17323; PWR5-NEXT:    lis 7, 3855
17324; PWR5-NEXT:    and 5, 4, 6
17325; PWR5-NEXT:    rotldi 4, 4, 62
17326; PWR5-NEXT:    add 3, 8, 3
17327; PWR5-NEXT:    lis 9, 257
17328; PWR5-NEXT:    ori 7, 7, 3855
17329; PWR5-NEXT:    and 4, 4, 6
17330; PWR5-NEXT:    rldicl 6, 3, 60, 4
17331; PWR5-NEXT:    ori 9, 9, 257
17332; PWR5-NEXT:    rldimi 7, 7, 32, 0
17333; PWR5-NEXT:    add 4, 5, 4
17334; PWR5-NEXT:    add 3, 3, 6
17335; PWR5-NEXT:    rldimi 9, 9, 32, 0
17336; PWR5-NEXT:    rldicl 5, 4, 60, 4
17337; PWR5-NEXT:    and 3, 3, 7
17338; PWR5-NEXT:    add 4, 4, 5
17339; PWR5-NEXT:    mulld 3, 3, 9
17340; PWR5-NEXT:    and 4, 4, 7
17341; PWR5-NEXT:    rldicl 3, 3, 8, 56
17342; PWR5-NEXT:    li 5, 22
17343; PWR5-NEXT:    mulld 4, 4, 9
17344; PWR5-NEXT:    subc 6, 3, 5
17345; PWR5-NEXT:    rldicl 4, 4, 8, 56
17346; PWR5-NEXT:    subfe 3, 3, 3
17347; PWR5-NEXT:    subc 5, 4, 5
17348; PWR5-NEXT:    subfe 4, 4, 4
17349; PWR5-NEXT:    blr
17350;
17351; PWR6-LABEL: ult_22_v2i64:
17352; PWR6:       # %bb.0:
17353; PWR6-NEXT:    lis 5, 21845
17354; PWR6-NEXT:    lis 6, 13107
17355; PWR6-NEXT:    ori 5, 5, 21845
17356; PWR6-NEXT:    rotldi 8, 4, 63
17357; PWR6-NEXT:    rotldi 9, 3, 63
17358; PWR6-NEXT:    rldimi 5, 5, 32, 0
17359; PWR6-NEXT:    and 8, 8, 5
17360; PWR6-NEXT:    and 5, 9, 5
17361; PWR6-NEXT:    ori 6, 6, 13107
17362; PWR6-NEXT:    sub 3, 3, 5
17363; PWR6-NEXT:    rldimi 6, 6, 32, 0
17364; PWR6-NEXT:    sub 4, 4, 8
17365; PWR6-NEXT:    and 8, 3, 6
17366; PWR6-NEXT:    rotldi 3, 3, 62
17367; PWR6-NEXT:    and 3, 3, 6
17368; PWR6-NEXT:    lis 7, 3855
17369; PWR6-NEXT:    and 5, 4, 6
17370; PWR6-NEXT:    rotldi 4, 4, 62
17371; PWR6-NEXT:    add 3, 8, 3
17372; PWR6-NEXT:    lis 9, 257
17373; PWR6-NEXT:    ori 7, 7, 3855
17374; PWR6-NEXT:    and 4, 4, 6
17375; PWR6-NEXT:    rldicl 6, 3, 60, 4
17376; PWR6-NEXT:    ori 9, 9, 257
17377; PWR6-NEXT:    rldimi 7, 7, 32, 0
17378; PWR6-NEXT:    add 4, 5, 4
17379; PWR6-NEXT:    add 3, 3, 6
17380; PWR6-NEXT:    rldimi 9, 9, 32, 0
17381; PWR6-NEXT:    rldicl 5, 4, 60, 4
17382; PWR6-NEXT:    and 3, 3, 7
17383; PWR6-NEXT:    add 4, 4, 5
17384; PWR6-NEXT:    mulld 3, 3, 9
17385; PWR6-NEXT:    and 4, 4, 7
17386; PWR6-NEXT:    rldicl 3, 3, 8, 56
17387; PWR6-NEXT:    li 5, 22
17388; PWR6-NEXT:    mulld 4, 4, 9
17389; PWR6-NEXT:    subc 6, 3, 5
17390; PWR6-NEXT:    rldicl 4, 4, 8, 56
17391; PWR6-NEXT:    subfe 3, 3, 3
17392; PWR6-NEXT:    subc 5, 4, 5
17393; PWR6-NEXT:    subfe 4, 4, 4
17394; PWR6-NEXT:    blr
17395;
17396; PWR7-LABEL: ult_22_v2i64:
17397; PWR7:       # %bb.0:
17398; PWR7-NEXT:    addi 3, 1, -32
17399; PWR7-NEXT:    li 5, 0
17400; PWR7-NEXT:    li 6, -1
17401; PWR7-NEXT:    stxvd2x 34, 0, 3
17402; PWR7-NEXT:    ld 3, -24(1)
17403; PWR7-NEXT:    ld 4, -32(1)
17404; PWR7-NEXT:    popcntd 3, 3
17405; PWR7-NEXT:    popcntd 4, 4
17406; PWR7-NEXT:    cmpldi 3, 22
17407; PWR7-NEXT:    isellt 3, 6, 5
17408; PWR7-NEXT:    cmpldi 4, 22
17409; PWR7-NEXT:    isellt 4, 6, 5
17410; PWR7-NEXT:    std 3, -8(1)
17411; PWR7-NEXT:    addi 3, 1, -16
17412; PWR7-NEXT:    std 4, -16(1)
17413; PWR7-NEXT:    lxvd2x 34, 0, 3
17414; PWR7-NEXT:    blr
17415;
17416; PWR8-LABEL: ult_22_v2i64:
17417; PWR8:       # %bb.0:
17418; PWR8-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
17419; PWR8-NEXT:    vpopcntd 2, 2
17420; PWR8-NEXT:    addi 3, 3, .LCPI141_0@toc@l
17421; PWR8-NEXT:    lxvd2x 35, 0, 3
17422; PWR8-NEXT:    vcmpgtud 2, 3, 2
17423; PWR8-NEXT:    blr
17424;
17425; PWR9-LABEL: ult_22_v2i64:
17426; PWR9:       # %bb.0:
17427; PWR9-NEXT:    addis 3, 2, .LCPI141_0@toc@ha
17428; PWR9-NEXT:    vpopcntd 2, 2
17429; PWR9-NEXT:    addi 3, 3, .LCPI141_0@toc@l
17430; PWR9-NEXT:    lxvx 35, 0, 3
17431; PWR9-NEXT:    vcmpgtud 2, 3, 2
17432; PWR9-NEXT:    blr
17433  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17434  %3 = icmp ult <2 x i64> %2, <i64 22, i64 22>
17435  %4 = sext <2 x i1> %3 to <2 x i64>
17436  ret <2 x i64> %4
17437}
17438
17439define <2 x i64> @ugt_22_v2i64(<2 x i64> %0) {
17440; PWR5-LABEL: ugt_22_v2i64:
17441; PWR5:       # %bb.0:
17442; PWR5-NEXT:    lis 5, 21845
17443; PWR5-NEXT:    lis 6, 13107
17444; PWR5-NEXT:    ori 5, 5, 21845
17445; PWR5-NEXT:    rotldi 8, 4, 63
17446; PWR5-NEXT:    rotldi 9, 3, 63
17447; PWR5-NEXT:    rldimi 5, 5, 32, 0
17448; PWR5-NEXT:    and 8, 8, 5
17449; PWR5-NEXT:    and 5, 9, 5
17450; PWR5-NEXT:    ori 6, 6, 13107
17451; PWR5-NEXT:    sub 3, 3, 5
17452; PWR5-NEXT:    rldimi 6, 6, 32, 0
17453; PWR5-NEXT:    sub 4, 4, 8
17454; PWR5-NEXT:    and 8, 3, 6
17455; PWR5-NEXT:    rotldi 3, 3, 62
17456; PWR5-NEXT:    and 3, 3, 6
17457; PWR5-NEXT:    lis 7, 3855
17458; PWR5-NEXT:    and 5, 4, 6
17459; PWR5-NEXT:    rotldi 4, 4, 62
17460; PWR5-NEXT:    add 3, 8, 3
17461; PWR5-NEXT:    lis 9, 257
17462; PWR5-NEXT:    ori 7, 7, 3855
17463; PWR5-NEXT:    and 4, 4, 6
17464; PWR5-NEXT:    rldicl 6, 3, 60, 4
17465; PWR5-NEXT:    ori 9, 9, 257
17466; PWR5-NEXT:    rldimi 7, 7, 32, 0
17467; PWR5-NEXT:    add 4, 5, 4
17468; PWR5-NEXT:    add 3, 3, 6
17469; PWR5-NEXT:    rldimi 9, 9, 32, 0
17470; PWR5-NEXT:    rldicl 5, 4, 60, 4
17471; PWR5-NEXT:    and 3, 3, 7
17472; PWR5-NEXT:    add 4, 4, 5
17473; PWR5-NEXT:    mulld 3, 3, 9
17474; PWR5-NEXT:    and 4, 4, 7
17475; PWR5-NEXT:    rldicl 3, 3, 8, 56
17476; PWR5-NEXT:    mulld 4, 4, 9
17477; PWR5-NEXT:    li 5, 22
17478; PWR5-NEXT:    subfic 3, 3, 22
17479; PWR5-NEXT:    rldicl 4, 4, 8, 56
17480; PWR5-NEXT:    subfe 3, 5, 5
17481; PWR5-NEXT:    subfic 4, 4, 22
17482; PWR5-NEXT:    subfe 4, 5, 5
17483; PWR5-NEXT:    blr
17484;
17485; PWR6-LABEL: ugt_22_v2i64:
17486; PWR6:       # %bb.0:
17487; PWR6-NEXT:    lis 5, 21845
17488; PWR6-NEXT:    lis 6, 13107
17489; PWR6-NEXT:    ori 5, 5, 21845
17490; PWR6-NEXT:    rotldi 8, 4, 63
17491; PWR6-NEXT:    rotldi 9, 3, 63
17492; PWR6-NEXT:    rldimi 5, 5, 32, 0
17493; PWR6-NEXT:    and 8, 8, 5
17494; PWR6-NEXT:    and 5, 9, 5
17495; PWR6-NEXT:    ori 6, 6, 13107
17496; PWR6-NEXT:    sub 3, 3, 5
17497; PWR6-NEXT:    rldimi 6, 6, 32, 0
17498; PWR6-NEXT:    sub 4, 4, 8
17499; PWR6-NEXT:    and 8, 3, 6
17500; PWR6-NEXT:    rotldi 3, 3, 62
17501; PWR6-NEXT:    and 3, 3, 6
17502; PWR6-NEXT:    lis 7, 3855
17503; PWR6-NEXT:    and 5, 4, 6
17504; PWR6-NEXT:    rotldi 4, 4, 62
17505; PWR6-NEXT:    add 3, 8, 3
17506; PWR6-NEXT:    lis 9, 257
17507; PWR6-NEXT:    ori 7, 7, 3855
17508; PWR6-NEXT:    and 4, 4, 6
17509; PWR6-NEXT:    rldicl 6, 3, 60, 4
17510; PWR6-NEXT:    ori 9, 9, 257
17511; PWR6-NEXT:    rldimi 7, 7, 32, 0
17512; PWR6-NEXT:    add 4, 5, 4
17513; PWR6-NEXT:    add 3, 3, 6
17514; PWR6-NEXT:    rldimi 9, 9, 32, 0
17515; PWR6-NEXT:    rldicl 5, 4, 60, 4
17516; PWR6-NEXT:    and 3, 3, 7
17517; PWR6-NEXT:    add 4, 4, 5
17518; PWR6-NEXT:    mulld 3, 3, 9
17519; PWR6-NEXT:    and 4, 4, 7
17520; PWR6-NEXT:    rldicl 3, 3, 8, 56
17521; PWR6-NEXT:    mulld 4, 4, 9
17522; PWR6-NEXT:    li 5, 22
17523; PWR6-NEXT:    subfic 3, 3, 22
17524; PWR6-NEXT:    rldicl 4, 4, 8, 56
17525; PWR6-NEXT:    subfe 3, 5, 5
17526; PWR6-NEXT:    subfic 4, 4, 22
17527; PWR6-NEXT:    subfe 4, 5, 5
17528; PWR6-NEXT:    blr
17529;
17530; PWR7-LABEL: ugt_22_v2i64:
17531; PWR7:       # %bb.0:
17532; PWR7-NEXT:    addi 3, 1, -32
17533; PWR7-NEXT:    li 5, 0
17534; PWR7-NEXT:    li 6, -1
17535; PWR7-NEXT:    stxvd2x 34, 0, 3
17536; PWR7-NEXT:    ld 3, -24(1)
17537; PWR7-NEXT:    ld 4, -32(1)
17538; PWR7-NEXT:    popcntd 3, 3
17539; PWR7-NEXT:    popcntd 4, 4
17540; PWR7-NEXT:    cmpldi 3, 22
17541; PWR7-NEXT:    iselgt 3, 6, 5
17542; PWR7-NEXT:    cmpldi 4, 22
17543; PWR7-NEXT:    iselgt 4, 6, 5
17544; PWR7-NEXT:    std 3, -8(1)
17545; PWR7-NEXT:    addi 3, 1, -16
17546; PWR7-NEXT:    std 4, -16(1)
17547; PWR7-NEXT:    lxvd2x 34, 0, 3
17548; PWR7-NEXT:    blr
17549;
17550; PWR8-LABEL: ugt_22_v2i64:
17551; PWR8:       # %bb.0:
17552; PWR8-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
17553; PWR8-NEXT:    vpopcntd 2, 2
17554; PWR8-NEXT:    addi 3, 3, .LCPI142_0@toc@l
17555; PWR8-NEXT:    lxvd2x 35, 0, 3
17556; PWR8-NEXT:    vcmpgtud 2, 2, 3
17557; PWR8-NEXT:    blr
17558;
17559; PWR9-LABEL: ugt_22_v2i64:
17560; PWR9:       # %bb.0:
17561; PWR9-NEXT:    addis 3, 2, .LCPI142_0@toc@ha
17562; PWR9-NEXT:    vpopcntd 2, 2
17563; PWR9-NEXT:    addi 3, 3, .LCPI142_0@toc@l
17564; PWR9-NEXT:    lxvx 35, 0, 3
17565; PWR9-NEXT:    vcmpgtud 2, 2, 3
17566; PWR9-NEXT:    blr
17567  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17568  %3 = icmp ugt <2 x i64> %2, <i64 22, i64 22>
17569  %4 = sext <2 x i1> %3 to <2 x i64>
17570  ret <2 x i64> %4
17571}
17572
17573define <2 x i64> @ult_23_v2i64(<2 x i64> %0) {
17574; PWR5-LABEL: ult_23_v2i64:
17575; PWR5:       # %bb.0:
17576; PWR5-NEXT:    lis 5, 21845
17577; PWR5-NEXT:    lis 6, 13107
17578; PWR5-NEXT:    ori 5, 5, 21845
17579; PWR5-NEXT:    rotldi 8, 4, 63
17580; PWR5-NEXT:    rotldi 9, 3, 63
17581; PWR5-NEXT:    rldimi 5, 5, 32, 0
17582; PWR5-NEXT:    and 8, 8, 5
17583; PWR5-NEXT:    and 5, 9, 5
17584; PWR5-NEXT:    ori 6, 6, 13107
17585; PWR5-NEXT:    sub 3, 3, 5
17586; PWR5-NEXT:    rldimi 6, 6, 32, 0
17587; PWR5-NEXT:    sub 4, 4, 8
17588; PWR5-NEXT:    and 8, 3, 6
17589; PWR5-NEXT:    rotldi 3, 3, 62
17590; PWR5-NEXT:    and 3, 3, 6
17591; PWR5-NEXT:    lis 7, 3855
17592; PWR5-NEXT:    and 5, 4, 6
17593; PWR5-NEXT:    rotldi 4, 4, 62
17594; PWR5-NEXT:    add 3, 8, 3
17595; PWR5-NEXT:    lis 9, 257
17596; PWR5-NEXT:    ori 7, 7, 3855
17597; PWR5-NEXT:    and 4, 4, 6
17598; PWR5-NEXT:    rldicl 6, 3, 60, 4
17599; PWR5-NEXT:    ori 9, 9, 257
17600; PWR5-NEXT:    rldimi 7, 7, 32, 0
17601; PWR5-NEXT:    add 4, 5, 4
17602; PWR5-NEXT:    add 3, 3, 6
17603; PWR5-NEXT:    rldimi 9, 9, 32, 0
17604; PWR5-NEXT:    rldicl 5, 4, 60, 4
17605; PWR5-NEXT:    and 3, 3, 7
17606; PWR5-NEXT:    add 4, 4, 5
17607; PWR5-NEXT:    mulld 3, 3, 9
17608; PWR5-NEXT:    and 4, 4, 7
17609; PWR5-NEXT:    rldicl 3, 3, 8, 56
17610; PWR5-NEXT:    li 5, 23
17611; PWR5-NEXT:    mulld 4, 4, 9
17612; PWR5-NEXT:    subc 6, 3, 5
17613; PWR5-NEXT:    rldicl 4, 4, 8, 56
17614; PWR5-NEXT:    subfe 3, 3, 3
17615; PWR5-NEXT:    subc 5, 4, 5
17616; PWR5-NEXT:    subfe 4, 4, 4
17617; PWR5-NEXT:    blr
17618;
17619; PWR6-LABEL: ult_23_v2i64:
17620; PWR6:       # %bb.0:
17621; PWR6-NEXT:    lis 5, 21845
17622; PWR6-NEXT:    lis 6, 13107
17623; PWR6-NEXT:    ori 5, 5, 21845
17624; PWR6-NEXT:    rotldi 8, 4, 63
17625; PWR6-NEXT:    rotldi 9, 3, 63
17626; PWR6-NEXT:    rldimi 5, 5, 32, 0
17627; PWR6-NEXT:    and 8, 8, 5
17628; PWR6-NEXT:    and 5, 9, 5
17629; PWR6-NEXT:    ori 6, 6, 13107
17630; PWR6-NEXT:    sub 3, 3, 5
17631; PWR6-NEXT:    rldimi 6, 6, 32, 0
17632; PWR6-NEXT:    sub 4, 4, 8
17633; PWR6-NEXT:    and 8, 3, 6
17634; PWR6-NEXT:    rotldi 3, 3, 62
17635; PWR6-NEXT:    and 3, 3, 6
17636; PWR6-NEXT:    lis 7, 3855
17637; PWR6-NEXT:    and 5, 4, 6
17638; PWR6-NEXT:    rotldi 4, 4, 62
17639; PWR6-NEXT:    add 3, 8, 3
17640; PWR6-NEXT:    lis 9, 257
17641; PWR6-NEXT:    ori 7, 7, 3855
17642; PWR6-NEXT:    and 4, 4, 6
17643; PWR6-NEXT:    rldicl 6, 3, 60, 4
17644; PWR6-NEXT:    ori 9, 9, 257
17645; PWR6-NEXT:    rldimi 7, 7, 32, 0
17646; PWR6-NEXT:    add 4, 5, 4
17647; PWR6-NEXT:    add 3, 3, 6
17648; PWR6-NEXT:    rldimi 9, 9, 32, 0
17649; PWR6-NEXT:    rldicl 5, 4, 60, 4
17650; PWR6-NEXT:    and 3, 3, 7
17651; PWR6-NEXT:    add 4, 4, 5
17652; PWR6-NEXT:    mulld 3, 3, 9
17653; PWR6-NEXT:    and 4, 4, 7
17654; PWR6-NEXT:    rldicl 3, 3, 8, 56
17655; PWR6-NEXT:    li 5, 23
17656; PWR6-NEXT:    mulld 4, 4, 9
17657; PWR6-NEXT:    subc 6, 3, 5
17658; PWR6-NEXT:    rldicl 4, 4, 8, 56
17659; PWR6-NEXT:    subfe 3, 3, 3
17660; PWR6-NEXT:    subc 5, 4, 5
17661; PWR6-NEXT:    subfe 4, 4, 4
17662; PWR6-NEXT:    blr
17663;
17664; PWR7-LABEL: ult_23_v2i64:
17665; PWR7:       # %bb.0:
17666; PWR7-NEXT:    addi 3, 1, -32
17667; PWR7-NEXT:    li 5, 0
17668; PWR7-NEXT:    li 6, -1
17669; PWR7-NEXT:    stxvd2x 34, 0, 3
17670; PWR7-NEXT:    ld 3, -24(1)
17671; PWR7-NEXT:    ld 4, -32(1)
17672; PWR7-NEXT:    popcntd 3, 3
17673; PWR7-NEXT:    popcntd 4, 4
17674; PWR7-NEXT:    cmpldi 3, 23
17675; PWR7-NEXT:    isellt 3, 6, 5
17676; PWR7-NEXT:    cmpldi 4, 23
17677; PWR7-NEXT:    isellt 4, 6, 5
17678; PWR7-NEXT:    std 3, -8(1)
17679; PWR7-NEXT:    addi 3, 1, -16
17680; PWR7-NEXT:    std 4, -16(1)
17681; PWR7-NEXT:    lxvd2x 34, 0, 3
17682; PWR7-NEXT:    blr
17683;
17684; PWR8-LABEL: ult_23_v2i64:
17685; PWR8:       # %bb.0:
17686; PWR8-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
17687; PWR8-NEXT:    vpopcntd 2, 2
17688; PWR8-NEXT:    addi 3, 3, .LCPI143_0@toc@l
17689; PWR8-NEXT:    lxvd2x 35, 0, 3
17690; PWR8-NEXT:    vcmpgtud 2, 3, 2
17691; PWR8-NEXT:    blr
17692;
17693; PWR9-LABEL: ult_23_v2i64:
17694; PWR9:       # %bb.0:
17695; PWR9-NEXT:    addis 3, 2, .LCPI143_0@toc@ha
17696; PWR9-NEXT:    vpopcntd 2, 2
17697; PWR9-NEXT:    addi 3, 3, .LCPI143_0@toc@l
17698; PWR9-NEXT:    lxvx 35, 0, 3
17699; PWR9-NEXT:    vcmpgtud 2, 3, 2
17700; PWR9-NEXT:    blr
17701  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17702  %3 = icmp ult <2 x i64> %2, <i64 23, i64 23>
17703  %4 = sext <2 x i1> %3 to <2 x i64>
17704  ret <2 x i64> %4
17705}
17706
17707define <2 x i64> @ugt_23_v2i64(<2 x i64> %0) {
17708; PWR5-LABEL: ugt_23_v2i64:
17709; PWR5:       # %bb.0:
17710; PWR5-NEXT:    lis 5, 21845
17711; PWR5-NEXT:    lis 6, 13107
17712; PWR5-NEXT:    ori 5, 5, 21845
17713; PWR5-NEXT:    rotldi 8, 4, 63
17714; PWR5-NEXT:    rotldi 9, 3, 63
17715; PWR5-NEXT:    rldimi 5, 5, 32, 0
17716; PWR5-NEXT:    and 8, 8, 5
17717; PWR5-NEXT:    and 5, 9, 5
17718; PWR5-NEXT:    ori 6, 6, 13107
17719; PWR5-NEXT:    sub 3, 3, 5
17720; PWR5-NEXT:    rldimi 6, 6, 32, 0
17721; PWR5-NEXT:    sub 4, 4, 8
17722; PWR5-NEXT:    and 8, 3, 6
17723; PWR5-NEXT:    rotldi 3, 3, 62
17724; PWR5-NEXT:    and 3, 3, 6
17725; PWR5-NEXT:    lis 7, 3855
17726; PWR5-NEXT:    and 5, 4, 6
17727; PWR5-NEXT:    rotldi 4, 4, 62
17728; PWR5-NEXT:    add 3, 8, 3
17729; PWR5-NEXT:    lis 9, 257
17730; PWR5-NEXT:    ori 7, 7, 3855
17731; PWR5-NEXT:    and 4, 4, 6
17732; PWR5-NEXT:    rldicl 6, 3, 60, 4
17733; PWR5-NEXT:    ori 9, 9, 257
17734; PWR5-NEXT:    rldimi 7, 7, 32, 0
17735; PWR5-NEXT:    add 4, 5, 4
17736; PWR5-NEXT:    add 3, 3, 6
17737; PWR5-NEXT:    rldimi 9, 9, 32, 0
17738; PWR5-NEXT:    rldicl 5, 4, 60, 4
17739; PWR5-NEXT:    and 3, 3, 7
17740; PWR5-NEXT:    add 4, 4, 5
17741; PWR5-NEXT:    mulld 3, 3, 9
17742; PWR5-NEXT:    and 4, 4, 7
17743; PWR5-NEXT:    rldicl 3, 3, 8, 56
17744; PWR5-NEXT:    mulld 4, 4, 9
17745; PWR5-NEXT:    li 5, 23
17746; PWR5-NEXT:    subfic 3, 3, 23
17747; PWR5-NEXT:    rldicl 4, 4, 8, 56
17748; PWR5-NEXT:    subfe 3, 5, 5
17749; PWR5-NEXT:    subfic 4, 4, 23
17750; PWR5-NEXT:    subfe 4, 5, 5
17751; PWR5-NEXT:    blr
17752;
17753; PWR6-LABEL: ugt_23_v2i64:
17754; PWR6:       # %bb.0:
17755; PWR6-NEXT:    lis 5, 21845
17756; PWR6-NEXT:    lis 6, 13107
17757; PWR6-NEXT:    ori 5, 5, 21845
17758; PWR6-NEXT:    rotldi 8, 4, 63
17759; PWR6-NEXT:    rotldi 9, 3, 63
17760; PWR6-NEXT:    rldimi 5, 5, 32, 0
17761; PWR6-NEXT:    and 8, 8, 5
17762; PWR6-NEXT:    and 5, 9, 5
17763; PWR6-NEXT:    ori 6, 6, 13107
17764; PWR6-NEXT:    sub 3, 3, 5
17765; PWR6-NEXT:    rldimi 6, 6, 32, 0
17766; PWR6-NEXT:    sub 4, 4, 8
17767; PWR6-NEXT:    and 8, 3, 6
17768; PWR6-NEXT:    rotldi 3, 3, 62
17769; PWR6-NEXT:    and 3, 3, 6
17770; PWR6-NEXT:    lis 7, 3855
17771; PWR6-NEXT:    and 5, 4, 6
17772; PWR6-NEXT:    rotldi 4, 4, 62
17773; PWR6-NEXT:    add 3, 8, 3
17774; PWR6-NEXT:    lis 9, 257
17775; PWR6-NEXT:    ori 7, 7, 3855
17776; PWR6-NEXT:    and 4, 4, 6
17777; PWR6-NEXT:    rldicl 6, 3, 60, 4
17778; PWR6-NEXT:    ori 9, 9, 257
17779; PWR6-NEXT:    rldimi 7, 7, 32, 0
17780; PWR6-NEXT:    add 4, 5, 4
17781; PWR6-NEXT:    add 3, 3, 6
17782; PWR6-NEXT:    rldimi 9, 9, 32, 0
17783; PWR6-NEXT:    rldicl 5, 4, 60, 4
17784; PWR6-NEXT:    and 3, 3, 7
17785; PWR6-NEXT:    add 4, 4, 5
17786; PWR6-NEXT:    mulld 3, 3, 9
17787; PWR6-NEXT:    and 4, 4, 7
17788; PWR6-NEXT:    rldicl 3, 3, 8, 56
17789; PWR6-NEXT:    mulld 4, 4, 9
17790; PWR6-NEXT:    li 5, 23
17791; PWR6-NEXT:    subfic 3, 3, 23
17792; PWR6-NEXT:    rldicl 4, 4, 8, 56
17793; PWR6-NEXT:    subfe 3, 5, 5
17794; PWR6-NEXT:    subfic 4, 4, 23
17795; PWR6-NEXT:    subfe 4, 5, 5
17796; PWR6-NEXT:    blr
17797;
17798; PWR7-LABEL: ugt_23_v2i64:
17799; PWR7:       # %bb.0:
17800; PWR7-NEXT:    addi 3, 1, -32
17801; PWR7-NEXT:    li 5, 0
17802; PWR7-NEXT:    li 6, -1
17803; PWR7-NEXT:    stxvd2x 34, 0, 3
17804; PWR7-NEXT:    ld 3, -24(1)
17805; PWR7-NEXT:    ld 4, -32(1)
17806; PWR7-NEXT:    popcntd 3, 3
17807; PWR7-NEXT:    popcntd 4, 4
17808; PWR7-NEXT:    cmpldi 3, 23
17809; PWR7-NEXT:    iselgt 3, 6, 5
17810; PWR7-NEXT:    cmpldi 4, 23
17811; PWR7-NEXT:    iselgt 4, 6, 5
17812; PWR7-NEXT:    std 3, -8(1)
17813; PWR7-NEXT:    addi 3, 1, -16
17814; PWR7-NEXT:    std 4, -16(1)
17815; PWR7-NEXT:    lxvd2x 34, 0, 3
17816; PWR7-NEXT:    blr
17817;
17818; PWR8-LABEL: ugt_23_v2i64:
17819; PWR8:       # %bb.0:
17820; PWR8-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
17821; PWR8-NEXT:    vpopcntd 2, 2
17822; PWR8-NEXT:    addi 3, 3, .LCPI144_0@toc@l
17823; PWR8-NEXT:    lxvd2x 35, 0, 3
17824; PWR8-NEXT:    vcmpgtud 2, 2, 3
17825; PWR8-NEXT:    blr
17826;
17827; PWR9-LABEL: ugt_23_v2i64:
17828; PWR9:       # %bb.0:
17829; PWR9-NEXT:    addis 3, 2, .LCPI144_0@toc@ha
17830; PWR9-NEXT:    vpopcntd 2, 2
17831; PWR9-NEXT:    addi 3, 3, .LCPI144_0@toc@l
17832; PWR9-NEXT:    lxvx 35, 0, 3
17833; PWR9-NEXT:    vcmpgtud 2, 2, 3
17834; PWR9-NEXT:    blr
17835  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17836  %3 = icmp ugt <2 x i64> %2, <i64 23, i64 23>
17837  %4 = sext <2 x i1> %3 to <2 x i64>
17838  ret <2 x i64> %4
17839}
17840
17841define <2 x i64> @ult_24_v2i64(<2 x i64> %0) {
17842; PWR5-LABEL: ult_24_v2i64:
17843; PWR5:       # %bb.0:
17844; PWR5-NEXT:    lis 5, 21845
17845; PWR5-NEXT:    lis 6, 13107
17846; PWR5-NEXT:    ori 5, 5, 21845
17847; PWR5-NEXT:    rotldi 8, 4, 63
17848; PWR5-NEXT:    rotldi 9, 3, 63
17849; PWR5-NEXT:    rldimi 5, 5, 32, 0
17850; PWR5-NEXT:    and 8, 8, 5
17851; PWR5-NEXT:    and 5, 9, 5
17852; PWR5-NEXT:    ori 6, 6, 13107
17853; PWR5-NEXT:    sub 3, 3, 5
17854; PWR5-NEXT:    rldimi 6, 6, 32, 0
17855; PWR5-NEXT:    sub 4, 4, 8
17856; PWR5-NEXT:    and 8, 3, 6
17857; PWR5-NEXT:    rotldi 3, 3, 62
17858; PWR5-NEXT:    and 3, 3, 6
17859; PWR5-NEXT:    lis 7, 3855
17860; PWR5-NEXT:    and 5, 4, 6
17861; PWR5-NEXT:    rotldi 4, 4, 62
17862; PWR5-NEXT:    add 3, 8, 3
17863; PWR5-NEXT:    lis 9, 257
17864; PWR5-NEXT:    ori 7, 7, 3855
17865; PWR5-NEXT:    and 4, 4, 6
17866; PWR5-NEXT:    rldicl 6, 3, 60, 4
17867; PWR5-NEXT:    ori 9, 9, 257
17868; PWR5-NEXT:    rldimi 7, 7, 32, 0
17869; PWR5-NEXT:    add 4, 5, 4
17870; PWR5-NEXT:    add 3, 3, 6
17871; PWR5-NEXT:    rldimi 9, 9, 32, 0
17872; PWR5-NEXT:    rldicl 5, 4, 60, 4
17873; PWR5-NEXT:    and 3, 3, 7
17874; PWR5-NEXT:    add 4, 4, 5
17875; PWR5-NEXT:    mulld 3, 3, 9
17876; PWR5-NEXT:    and 4, 4, 7
17877; PWR5-NEXT:    rldicl 3, 3, 8, 56
17878; PWR5-NEXT:    li 5, 24
17879; PWR5-NEXT:    mulld 4, 4, 9
17880; PWR5-NEXT:    subc 6, 3, 5
17881; PWR5-NEXT:    rldicl 4, 4, 8, 56
17882; PWR5-NEXT:    subfe 3, 3, 3
17883; PWR5-NEXT:    subc 5, 4, 5
17884; PWR5-NEXT:    subfe 4, 4, 4
17885; PWR5-NEXT:    blr
17886;
17887; PWR6-LABEL: ult_24_v2i64:
17888; PWR6:       # %bb.0:
17889; PWR6-NEXT:    lis 5, 21845
17890; PWR6-NEXT:    lis 6, 13107
17891; PWR6-NEXT:    ori 5, 5, 21845
17892; PWR6-NEXT:    rotldi 8, 4, 63
17893; PWR6-NEXT:    rotldi 9, 3, 63
17894; PWR6-NEXT:    rldimi 5, 5, 32, 0
17895; PWR6-NEXT:    and 8, 8, 5
17896; PWR6-NEXT:    and 5, 9, 5
17897; PWR6-NEXT:    ori 6, 6, 13107
17898; PWR6-NEXT:    sub 3, 3, 5
17899; PWR6-NEXT:    rldimi 6, 6, 32, 0
17900; PWR6-NEXT:    sub 4, 4, 8
17901; PWR6-NEXT:    and 8, 3, 6
17902; PWR6-NEXT:    rotldi 3, 3, 62
17903; PWR6-NEXT:    and 3, 3, 6
17904; PWR6-NEXT:    lis 7, 3855
17905; PWR6-NEXT:    and 5, 4, 6
17906; PWR6-NEXT:    rotldi 4, 4, 62
17907; PWR6-NEXT:    add 3, 8, 3
17908; PWR6-NEXT:    lis 9, 257
17909; PWR6-NEXT:    ori 7, 7, 3855
17910; PWR6-NEXT:    and 4, 4, 6
17911; PWR6-NEXT:    rldicl 6, 3, 60, 4
17912; PWR6-NEXT:    ori 9, 9, 257
17913; PWR6-NEXT:    rldimi 7, 7, 32, 0
17914; PWR6-NEXT:    add 4, 5, 4
17915; PWR6-NEXT:    add 3, 3, 6
17916; PWR6-NEXT:    rldimi 9, 9, 32, 0
17917; PWR6-NEXT:    rldicl 5, 4, 60, 4
17918; PWR6-NEXT:    and 3, 3, 7
17919; PWR6-NEXT:    add 4, 4, 5
17920; PWR6-NEXT:    mulld 3, 3, 9
17921; PWR6-NEXT:    and 4, 4, 7
17922; PWR6-NEXT:    rldicl 3, 3, 8, 56
17923; PWR6-NEXT:    li 5, 24
17924; PWR6-NEXT:    mulld 4, 4, 9
17925; PWR6-NEXT:    subc 6, 3, 5
17926; PWR6-NEXT:    rldicl 4, 4, 8, 56
17927; PWR6-NEXT:    subfe 3, 3, 3
17928; PWR6-NEXT:    subc 5, 4, 5
17929; PWR6-NEXT:    subfe 4, 4, 4
17930; PWR6-NEXT:    blr
17931;
17932; PWR7-LABEL: ult_24_v2i64:
17933; PWR7:       # %bb.0:
17934; PWR7-NEXT:    addi 3, 1, -32
17935; PWR7-NEXT:    li 5, 0
17936; PWR7-NEXT:    li 6, -1
17937; PWR7-NEXT:    stxvd2x 34, 0, 3
17938; PWR7-NEXT:    ld 3, -24(1)
17939; PWR7-NEXT:    ld 4, -32(1)
17940; PWR7-NEXT:    popcntd 3, 3
17941; PWR7-NEXT:    popcntd 4, 4
17942; PWR7-NEXT:    cmpldi 3, 24
17943; PWR7-NEXT:    isellt 3, 6, 5
17944; PWR7-NEXT:    cmpldi 4, 24
17945; PWR7-NEXT:    isellt 4, 6, 5
17946; PWR7-NEXT:    std 3, -8(1)
17947; PWR7-NEXT:    addi 3, 1, -16
17948; PWR7-NEXT:    std 4, -16(1)
17949; PWR7-NEXT:    lxvd2x 34, 0, 3
17950; PWR7-NEXT:    blr
17951;
17952; PWR8-LABEL: ult_24_v2i64:
17953; PWR8:       # %bb.0:
17954; PWR8-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
17955; PWR8-NEXT:    vpopcntd 2, 2
17956; PWR8-NEXT:    addi 3, 3, .LCPI145_0@toc@l
17957; PWR8-NEXT:    lxvd2x 35, 0, 3
17958; PWR8-NEXT:    vcmpgtud 2, 3, 2
17959; PWR8-NEXT:    blr
17960;
17961; PWR9-LABEL: ult_24_v2i64:
17962; PWR9:       # %bb.0:
17963; PWR9-NEXT:    addis 3, 2, .LCPI145_0@toc@ha
17964; PWR9-NEXT:    vpopcntd 2, 2
17965; PWR9-NEXT:    addi 3, 3, .LCPI145_0@toc@l
17966; PWR9-NEXT:    lxvx 35, 0, 3
17967; PWR9-NEXT:    vcmpgtud 2, 3, 2
17968; PWR9-NEXT:    blr
17969  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
17970  %3 = icmp ult <2 x i64> %2, <i64 24, i64 24>
17971  %4 = sext <2 x i1> %3 to <2 x i64>
17972  ret <2 x i64> %4
17973}
17974
17975define <2 x i64> @ugt_24_v2i64(<2 x i64> %0) {
17976; PWR5-LABEL: ugt_24_v2i64:
17977; PWR5:       # %bb.0:
17978; PWR5-NEXT:    lis 5, 21845
17979; PWR5-NEXT:    lis 6, 13107
17980; PWR5-NEXT:    ori 5, 5, 21845
17981; PWR5-NEXT:    rotldi 8, 4, 63
17982; PWR5-NEXT:    rotldi 9, 3, 63
17983; PWR5-NEXT:    rldimi 5, 5, 32, 0
17984; PWR5-NEXT:    and 8, 8, 5
17985; PWR5-NEXT:    and 5, 9, 5
17986; PWR5-NEXT:    ori 6, 6, 13107
17987; PWR5-NEXT:    sub 3, 3, 5
17988; PWR5-NEXT:    rldimi 6, 6, 32, 0
17989; PWR5-NEXT:    sub 4, 4, 8
17990; PWR5-NEXT:    and 8, 3, 6
17991; PWR5-NEXT:    rotldi 3, 3, 62
17992; PWR5-NEXT:    and 3, 3, 6
17993; PWR5-NEXT:    lis 7, 3855
17994; PWR5-NEXT:    and 5, 4, 6
17995; PWR5-NEXT:    rotldi 4, 4, 62
17996; PWR5-NEXT:    add 3, 8, 3
17997; PWR5-NEXT:    lis 9, 257
17998; PWR5-NEXT:    ori 7, 7, 3855
17999; PWR5-NEXT:    and 4, 4, 6
18000; PWR5-NEXT:    rldicl 6, 3, 60, 4
18001; PWR5-NEXT:    ori 9, 9, 257
18002; PWR5-NEXT:    rldimi 7, 7, 32, 0
18003; PWR5-NEXT:    add 4, 5, 4
18004; PWR5-NEXT:    add 3, 3, 6
18005; PWR5-NEXT:    rldimi 9, 9, 32, 0
18006; PWR5-NEXT:    rldicl 5, 4, 60, 4
18007; PWR5-NEXT:    and 3, 3, 7
18008; PWR5-NEXT:    add 4, 4, 5
18009; PWR5-NEXT:    mulld 3, 3, 9
18010; PWR5-NEXT:    and 4, 4, 7
18011; PWR5-NEXT:    rldicl 3, 3, 8, 56
18012; PWR5-NEXT:    mulld 4, 4, 9
18013; PWR5-NEXT:    li 5, 24
18014; PWR5-NEXT:    subfic 3, 3, 24
18015; PWR5-NEXT:    rldicl 4, 4, 8, 56
18016; PWR5-NEXT:    subfe 3, 5, 5
18017; PWR5-NEXT:    subfic 4, 4, 24
18018; PWR5-NEXT:    subfe 4, 5, 5
18019; PWR5-NEXT:    blr
18020;
18021; PWR6-LABEL: ugt_24_v2i64:
18022; PWR6:       # %bb.0:
18023; PWR6-NEXT:    lis 5, 21845
18024; PWR6-NEXT:    lis 6, 13107
18025; PWR6-NEXT:    ori 5, 5, 21845
18026; PWR6-NEXT:    rotldi 8, 4, 63
18027; PWR6-NEXT:    rotldi 9, 3, 63
18028; PWR6-NEXT:    rldimi 5, 5, 32, 0
18029; PWR6-NEXT:    and 8, 8, 5
18030; PWR6-NEXT:    and 5, 9, 5
18031; PWR6-NEXT:    ori 6, 6, 13107
18032; PWR6-NEXT:    sub 3, 3, 5
18033; PWR6-NEXT:    rldimi 6, 6, 32, 0
18034; PWR6-NEXT:    sub 4, 4, 8
18035; PWR6-NEXT:    and 8, 3, 6
18036; PWR6-NEXT:    rotldi 3, 3, 62
18037; PWR6-NEXT:    and 3, 3, 6
18038; PWR6-NEXT:    lis 7, 3855
18039; PWR6-NEXT:    and 5, 4, 6
18040; PWR6-NEXT:    rotldi 4, 4, 62
18041; PWR6-NEXT:    add 3, 8, 3
18042; PWR6-NEXT:    lis 9, 257
18043; PWR6-NEXT:    ori 7, 7, 3855
18044; PWR6-NEXT:    and 4, 4, 6
18045; PWR6-NEXT:    rldicl 6, 3, 60, 4
18046; PWR6-NEXT:    ori 9, 9, 257
18047; PWR6-NEXT:    rldimi 7, 7, 32, 0
18048; PWR6-NEXT:    add 4, 5, 4
18049; PWR6-NEXT:    add 3, 3, 6
18050; PWR6-NEXT:    rldimi 9, 9, 32, 0
18051; PWR6-NEXT:    rldicl 5, 4, 60, 4
18052; PWR6-NEXT:    and 3, 3, 7
18053; PWR6-NEXT:    add 4, 4, 5
18054; PWR6-NEXT:    mulld 3, 3, 9
18055; PWR6-NEXT:    and 4, 4, 7
18056; PWR6-NEXT:    rldicl 3, 3, 8, 56
18057; PWR6-NEXT:    mulld 4, 4, 9
18058; PWR6-NEXT:    li 5, 24
18059; PWR6-NEXT:    subfic 3, 3, 24
18060; PWR6-NEXT:    rldicl 4, 4, 8, 56
18061; PWR6-NEXT:    subfe 3, 5, 5
18062; PWR6-NEXT:    subfic 4, 4, 24
18063; PWR6-NEXT:    subfe 4, 5, 5
18064; PWR6-NEXT:    blr
18065;
18066; PWR7-LABEL: ugt_24_v2i64:
18067; PWR7:       # %bb.0:
18068; PWR7-NEXT:    addi 3, 1, -32
18069; PWR7-NEXT:    li 5, 0
18070; PWR7-NEXT:    li 6, -1
18071; PWR7-NEXT:    stxvd2x 34, 0, 3
18072; PWR7-NEXT:    ld 3, -24(1)
18073; PWR7-NEXT:    ld 4, -32(1)
18074; PWR7-NEXT:    popcntd 3, 3
18075; PWR7-NEXT:    popcntd 4, 4
18076; PWR7-NEXT:    cmpldi 3, 24
18077; PWR7-NEXT:    iselgt 3, 6, 5
18078; PWR7-NEXT:    cmpldi 4, 24
18079; PWR7-NEXT:    iselgt 4, 6, 5
18080; PWR7-NEXT:    std 3, -8(1)
18081; PWR7-NEXT:    addi 3, 1, -16
18082; PWR7-NEXT:    std 4, -16(1)
18083; PWR7-NEXT:    lxvd2x 34, 0, 3
18084; PWR7-NEXT:    blr
18085;
18086; PWR8-LABEL: ugt_24_v2i64:
18087; PWR8:       # %bb.0:
18088; PWR8-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
18089; PWR8-NEXT:    vpopcntd 2, 2
18090; PWR8-NEXT:    addi 3, 3, .LCPI146_0@toc@l
18091; PWR8-NEXT:    lxvd2x 35, 0, 3
18092; PWR8-NEXT:    vcmpgtud 2, 2, 3
18093; PWR8-NEXT:    blr
18094;
18095; PWR9-LABEL: ugt_24_v2i64:
18096; PWR9:       # %bb.0:
18097; PWR9-NEXT:    addis 3, 2, .LCPI146_0@toc@ha
18098; PWR9-NEXT:    vpopcntd 2, 2
18099; PWR9-NEXT:    addi 3, 3, .LCPI146_0@toc@l
18100; PWR9-NEXT:    lxvx 35, 0, 3
18101; PWR9-NEXT:    vcmpgtud 2, 2, 3
18102; PWR9-NEXT:    blr
18103  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18104  %3 = icmp ugt <2 x i64> %2, <i64 24, i64 24>
18105  %4 = sext <2 x i1> %3 to <2 x i64>
18106  ret <2 x i64> %4
18107}
18108
18109define <2 x i64> @ult_25_v2i64(<2 x i64> %0) {
18110; PWR5-LABEL: ult_25_v2i64:
18111; PWR5:       # %bb.0:
18112; PWR5-NEXT:    lis 5, 21845
18113; PWR5-NEXT:    lis 6, 13107
18114; PWR5-NEXT:    ori 5, 5, 21845
18115; PWR5-NEXT:    rotldi 8, 4, 63
18116; PWR5-NEXT:    rotldi 9, 3, 63
18117; PWR5-NEXT:    rldimi 5, 5, 32, 0
18118; PWR5-NEXT:    and 8, 8, 5
18119; PWR5-NEXT:    and 5, 9, 5
18120; PWR5-NEXT:    ori 6, 6, 13107
18121; PWR5-NEXT:    sub 3, 3, 5
18122; PWR5-NEXT:    rldimi 6, 6, 32, 0
18123; PWR5-NEXT:    sub 4, 4, 8
18124; PWR5-NEXT:    and 8, 3, 6
18125; PWR5-NEXT:    rotldi 3, 3, 62
18126; PWR5-NEXT:    and 3, 3, 6
18127; PWR5-NEXT:    lis 7, 3855
18128; PWR5-NEXT:    and 5, 4, 6
18129; PWR5-NEXT:    rotldi 4, 4, 62
18130; PWR5-NEXT:    add 3, 8, 3
18131; PWR5-NEXT:    lis 9, 257
18132; PWR5-NEXT:    ori 7, 7, 3855
18133; PWR5-NEXT:    and 4, 4, 6
18134; PWR5-NEXT:    rldicl 6, 3, 60, 4
18135; PWR5-NEXT:    ori 9, 9, 257
18136; PWR5-NEXT:    rldimi 7, 7, 32, 0
18137; PWR5-NEXT:    add 4, 5, 4
18138; PWR5-NEXT:    add 3, 3, 6
18139; PWR5-NEXT:    rldimi 9, 9, 32, 0
18140; PWR5-NEXT:    rldicl 5, 4, 60, 4
18141; PWR5-NEXT:    and 3, 3, 7
18142; PWR5-NEXT:    add 4, 4, 5
18143; PWR5-NEXT:    mulld 3, 3, 9
18144; PWR5-NEXT:    and 4, 4, 7
18145; PWR5-NEXT:    rldicl 3, 3, 8, 56
18146; PWR5-NEXT:    li 5, 25
18147; PWR5-NEXT:    mulld 4, 4, 9
18148; PWR5-NEXT:    subc 6, 3, 5
18149; PWR5-NEXT:    rldicl 4, 4, 8, 56
18150; PWR5-NEXT:    subfe 3, 3, 3
18151; PWR5-NEXT:    subc 5, 4, 5
18152; PWR5-NEXT:    subfe 4, 4, 4
18153; PWR5-NEXT:    blr
18154;
18155; PWR6-LABEL: ult_25_v2i64:
18156; PWR6:       # %bb.0:
18157; PWR6-NEXT:    lis 5, 21845
18158; PWR6-NEXT:    lis 6, 13107
18159; PWR6-NEXT:    ori 5, 5, 21845
18160; PWR6-NEXT:    rotldi 8, 4, 63
18161; PWR6-NEXT:    rotldi 9, 3, 63
18162; PWR6-NEXT:    rldimi 5, 5, 32, 0
18163; PWR6-NEXT:    and 8, 8, 5
18164; PWR6-NEXT:    and 5, 9, 5
18165; PWR6-NEXT:    ori 6, 6, 13107
18166; PWR6-NEXT:    sub 3, 3, 5
18167; PWR6-NEXT:    rldimi 6, 6, 32, 0
18168; PWR6-NEXT:    sub 4, 4, 8
18169; PWR6-NEXT:    and 8, 3, 6
18170; PWR6-NEXT:    rotldi 3, 3, 62
18171; PWR6-NEXT:    and 3, 3, 6
18172; PWR6-NEXT:    lis 7, 3855
18173; PWR6-NEXT:    and 5, 4, 6
18174; PWR6-NEXT:    rotldi 4, 4, 62
18175; PWR6-NEXT:    add 3, 8, 3
18176; PWR6-NEXT:    lis 9, 257
18177; PWR6-NEXT:    ori 7, 7, 3855
18178; PWR6-NEXT:    and 4, 4, 6
18179; PWR6-NEXT:    rldicl 6, 3, 60, 4
18180; PWR6-NEXT:    ori 9, 9, 257
18181; PWR6-NEXT:    rldimi 7, 7, 32, 0
18182; PWR6-NEXT:    add 4, 5, 4
18183; PWR6-NEXT:    add 3, 3, 6
18184; PWR6-NEXT:    rldimi 9, 9, 32, 0
18185; PWR6-NEXT:    rldicl 5, 4, 60, 4
18186; PWR6-NEXT:    and 3, 3, 7
18187; PWR6-NEXT:    add 4, 4, 5
18188; PWR6-NEXT:    mulld 3, 3, 9
18189; PWR6-NEXT:    and 4, 4, 7
18190; PWR6-NEXT:    rldicl 3, 3, 8, 56
18191; PWR6-NEXT:    li 5, 25
18192; PWR6-NEXT:    mulld 4, 4, 9
18193; PWR6-NEXT:    subc 6, 3, 5
18194; PWR6-NEXT:    rldicl 4, 4, 8, 56
18195; PWR6-NEXT:    subfe 3, 3, 3
18196; PWR6-NEXT:    subc 5, 4, 5
18197; PWR6-NEXT:    subfe 4, 4, 4
18198; PWR6-NEXT:    blr
18199;
18200; PWR7-LABEL: ult_25_v2i64:
18201; PWR7:       # %bb.0:
18202; PWR7-NEXT:    addi 3, 1, -32
18203; PWR7-NEXT:    li 5, 0
18204; PWR7-NEXT:    li 6, -1
18205; PWR7-NEXT:    stxvd2x 34, 0, 3
18206; PWR7-NEXT:    ld 3, -24(1)
18207; PWR7-NEXT:    ld 4, -32(1)
18208; PWR7-NEXT:    popcntd 3, 3
18209; PWR7-NEXT:    popcntd 4, 4
18210; PWR7-NEXT:    cmpldi 3, 25
18211; PWR7-NEXT:    isellt 3, 6, 5
18212; PWR7-NEXT:    cmpldi 4, 25
18213; PWR7-NEXT:    isellt 4, 6, 5
18214; PWR7-NEXT:    std 3, -8(1)
18215; PWR7-NEXT:    addi 3, 1, -16
18216; PWR7-NEXT:    std 4, -16(1)
18217; PWR7-NEXT:    lxvd2x 34, 0, 3
18218; PWR7-NEXT:    blr
18219;
18220; PWR8-LABEL: ult_25_v2i64:
18221; PWR8:       # %bb.0:
18222; PWR8-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
18223; PWR8-NEXT:    vpopcntd 2, 2
18224; PWR8-NEXT:    addi 3, 3, .LCPI147_0@toc@l
18225; PWR8-NEXT:    lxvd2x 35, 0, 3
18226; PWR8-NEXT:    vcmpgtud 2, 3, 2
18227; PWR8-NEXT:    blr
18228;
18229; PWR9-LABEL: ult_25_v2i64:
18230; PWR9:       # %bb.0:
18231; PWR9-NEXT:    addis 3, 2, .LCPI147_0@toc@ha
18232; PWR9-NEXT:    vpopcntd 2, 2
18233; PWR9-NEXT:    addi 3, 3, .LCPI147_0@toc@l
18234; PWR9-NEXT:    lxvx 35, 0, 3
18235; PWR9-NEXT:    vcmpgtud 2, 3, 2
18236; PWR9-NEXT:    blr
18237  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18238  %3 = icmp ult <2 x i64> %2, <i64 25, i64 25>
18239  %4 = sext <2 x i1> %3 to <2 x i64>
18240  ret <2 x i64> %4
18241}
18242
18243define <2 x i64> @ugt_25_v2i64(<2 x i64> %0) {
18244; PWR5-LABEL: ugt_25_v2i64:
18245; PWR5:       # %bb.0:
18246; PWR5-NEXT:    lis 5, 21845
18247; PWR5-NEXT:    lis 6, 13107
18248; PWR5-NEXT:    ori 5, 5, 21845
18249; PWR5-NEXT:    rotldi 8, 4, 63
18250; PWR5-NEXT:    rotldi 9, 3, 63
18251; PWR5-NEXT:    rldimi 5, 5, 32, 0
18252; PWR5-NEXT:    and 8, 8, 5
18253; PWR5-NEXT:    and 5, 9, 5
18254; PWR5-NEXT:    ori 6, 6, 13107
18255; PWR5-NEXT:    sub 3, 3, 5
18256; PWR5-NEXT:    rldimi 6, 6, 32, 0
18257; PWR5-NEXT:    sub 4, 4, 8
18258; PWR5-NEXT:    and 8, 3, 6
18259; PWR5-NEXT:    rotldi 3, 3, 62
18260; PWR5-NEXT:    and 3, 3, 6
18261; PWR5-NEXT:    lis 7, 3855
18262; PWR5-NEXT:    and 5, 4, 6
18263; PWR5-NEXT:    rotldi 4, 4, 62
18264; PWR5-NEXT:    add 3, 8, 3
18265; PWR5-NEXT:    lis 9, 257
18266; PWR5-NEXT:    ori 7, 7, 3855
18267; PWR5-NEXT:    and 4, 4, 6
18268; PWR5-NEXT:    rldicl 6, 3, 60, 4
18269; PWR5-NEXT:    ori 9, 9, 257
18270; PWR5-NEXT:    rldimi 7, 7, 32, 0
18271; PWR5-NEXT:    add 4, 5, 4
18272; PWR5-NEXT:    add 3, 3, 6
18273; PWR5-NEXT:    rldimi 9, 9, 32, 0
18274; PWR5-NEXT:    rldicl 5, 4, 60, 4
18275; PWR5-NEXT:    and 3, 3, 7
18276; PWR5-NEXT:    add 4, 4, 5
18277; PWR5-NEXT:    mulld 3, 3, 9
18278; PWR5-NEXT:    and 4, 4, 7
18279; PWR5-NEXT:    rldicl 3, 3, 8, 56
18280; PWR5-NEXT:    mulld 4, 4, 9
18281; PWR5-NEXT:    li 5, 25
18282; PWR5-NEXT:    subfic 3, 3, 25
18283; PWR5-NEXT:    rldicl 4, 4, 8, 56
18284; PWR5-NEXT:    subfe 3, 5, 5
18285; PWR5-NEXT:    subfic 4, 4, 25
18286; PWR5-NEXT:    subfe 4, 5, 5
18287; PWR5-NEXT:    blr
18288;
18289; PWR6-LABEL: ugt_25_v2i64:
18290; PWR6:       # %bb.0:
18291; PWR6-NEXT:    lis 5, 21845
18292; PWR6-NEXT:    lis 6, 13107
18293; PWR6-NEXT:    ori 5, 5, 21845
18294; PWR6-NEXT:    rotldi 8, 4, 63
18295; PWR6-NEXT:    rotldi 9, 3, 63
18296; PWR6-NEXT:    rldimi 5, 5, 32, 0
18297; PWR6-NEXT:    and 8, 8, 5
18298; PWR6-NEXT:    and 5, 9, 5
18299; PWR6-NEXT:    ori 6, 6, 13107
18300; PWR6-NEXT:    sub 3, 3, 5
18301; PWR6-NEXT:    rldimi 6, 6, 32, 0
18302; PWR6-NEXT:    sub 4, 4, 8
18303; PWR6-NEXT:    and 8, 3, 6
18304; PWR6-NEXT:    rotldi 3, 3, 62
18305; PWR6-NEXT:    and 3, 3, 6
18306; PWR6-NEXT:    lis 7, 3855
18307; PWR6-NEXT:    and 5, 4, 6
18308; PWR6-NEXT:    rotldi 4, 4, 62
18309; PWR6-NEXT:    add 3, 8, 3
18310; PWR6-NEXT:    lis 9, 257
18311; PWR6-NEXT:    ori 7, 7, 3855
18312; PWR6-NEXT:    and 4, 4, 6
18313; PWR6-NEXT:    rldicl 6, 3, 60, 4
18314; PWR6-NEXT:    ori 9, 9, 257
18315; PWR6-NEXT:    rldimi 7, 7, 32, 0
18316; PWR6-NEXT:    add 4, 5, 4
18317; PWR6-NEXT:    add 3, 3, 6
18318; PWR6-NEXT:    rldimi 9, 9, 32, 0
18319; PWR6-NEXT:    rldicl 5, 4, 60, 4
18320; PWR6-NEXT:    and 3, 3, 7
18321; PWR6-NEXT:    add 4, 4, 5
18322; PWR6-NEXT:    mulld 3, 3, 9
18323; PWR6-NEXT:    and 4, 4, 7
18324; PWR6-NEXT:    rldicl 3, 3, 8, 56
18325; PWR6-NEXT:    mulld 4, 4, 9
18326; PWR6-NEXT:    li 5, 25
18327; PWR6-NEXT:    subfic 3, 3, 25
18328; PWR6-NEXT:    rldicl 4, 4, 8, 56
18329; PWR6-NEXT:    subfe 3, 5, 5
18330; PWR6-NEXT:    subfic 4, 4, 25
18331; PWR6-NEXT:    subfe 4, 5, 5
18332; PWR6-NEXT:    blr
18333;
18334; PWR7-LABEL: ugt_25_v2i64:
18335; PWR7:       # %bb.0:
18336; PWR7-NEXT:    addi 3, 1, -32
18337; PWR7-NEXT:    li 5, 0
18338; PWR7-NEXT:    li 6, -1
18339; PWR7-NEXT:    stxvd2x 34, 0, 3
18340; PWR7-NEXT:    ld 3, -24(1)
18341; PWR7-NEXT:    ld 4, -32(1)
18342; PWR7-NEXT:    popcntd 3, 3
18343; PWR7-NEXT:    popcntd 4, 4
18344; PWR7-NEXT:    cmpldi 3, 25
18345; PWR7-NEXT:    iselgt 3, 6, 5
18346; PWR7-NEXT:    cmpldi 4, 25
18347; PWR7-NEXT:    iselgt 4, 6, 5
18348; PWR7-NEXT:    std 3, -8(1)
18349; PWR7-NEXT:    addi 3, 1, -16
18350; PWR7-NEXT:    std 4, -16(1)
18351; PWR7-NEXT:    lxvd2x 34, 0, 3
18352; PWR7-NEXT:    blr
18353;
18354; PWR8-LABEL: ugt_25_v2i64:
18355; PWR8:       # %bb.0:
18356; PWR8-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
18357; PWR8-NEXT:    vpopcntd 2, 2
18358; PWR8-NEXT:    addi 3, 3, .LCPI148_0@toc@l
18359; PWR8-NEXT:    lxvd2x 35, 0, 3
18360; PWR8-NEXT:    vcmpgtud 2, 2, 3
18361; PWR8-NEXT:    blr
18362;
18363; PWR9-LABEL: ugt_25_v2i64:
18364; PWR9:       # %bb.0:
18365; PWR9-NEXT:    addis 3, 2, .LCPI148_0@toc@ha
18366; PWR9-NEXT:    vpopcntd 2, 2
18367; PWR9-NEXT:    addi 3, 3, .LCPI148_0@toc@l
18368; PWR9-NEXT:    lxvx 35, 0, 3
18369; PWR9-NEXT:    vcmpgtud 2, 2, 3
18370; PWR9-NEXT:    blr
18371  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18372  %3 = icmp ugt <2 x i64> %2, <i64 25, i64 25>
18373  %4 = sext <2 x i1> %3 to <2 x i64>
18374  ret <2 x i64> %4
18375}
18376
18377define <2 x i64> @ult_26_v2i64(<2 x i64> %0) {
18378; PWR5-LABEL: ult_26_v2i64:
18379; PWR5:       # %bb.0:
18380; PWR5-NEXT:    lis 5, 21845
18381; PWR5-NEXT:    lis 6, 13107
18382; PWR5-NEXT:    ori 5, 5, 21845
18383; PWR5-NEXT:    rotldi 8, 4, 63
18384; PWR5-NEXT:    rotldi 9, 3, 63
18385; PWR5-NEXT:    rldimi 5, 5, 32, 0
18386; PWR5-NEXT:    and 8, 8, 5
18387; PWR5-NEXT:    and 5, 9, 5
18388; PWR5-NEXT:    ori 6, 6, 13107
18389; PWR5-NEXT:    sub 3, 3, 5
18390; PWR5-NEXT:    rldimi 6, 6, 32, 0
18391; PWR5-NEXT:    sub 4, 4, 8
18392; PWR5-NEXT:    and 8, 3, 6
18393; PWR5-NEXT:    rotldi 3, 3, 62
18394; PWR5-NEXT:    and 3, 3, 6
18395; PWR5-NEXT:    lis 7, 3855
18396; PWR5-NEXT:    and 5, 4, 6
18397; PWR5-NEXT:    rotldi 4, 4, 62
18398; PWR5-NEXT:    add 3, 8, 3
18399; PWR5-NEXT:    lis 9, 257
18400; PWR5-NEXT:    ori 7, 7, 3855
18401; PWR5-NEXT:    and 4, 4, 6
18402; PWR5-NEXT:    rldicl 6, 3, 60, 4
18403; PWR5-NEXT:    ori 9, 9, 257
18404; PWR5-NEXT:    rldimi 7, 7, 32, 0
18405; PWR5-NEXT:    add 4, 5, 4
18406; PWR5-NEXT:    add 3, 3, 6
18407; PWR5-NEXT:    rldimi 9, 9, 32, 0
18408; PWR5-NEXT:    rldicl 5, 4, 60, 4
18409; PWR5-NEXT:    and 3, 3, 7
18410; PWR5-NEXT:    add 4, 4, 5
18411; PWR5-NEXT:    mulld 3, 3, 9
18412; PWR5-NEXT:    and 4, 4, 7
18413; PWR5-NEXT:    rldicl 3, 3, 8, 56
18414; PWR5-NEXT:    li 5, 26
18415; PWR5-NEXT:    mulld 4, 4, 9
18416; PWR5-NEXT:    subc 6, 3, 5
18417; PWR5-NEXT:    rldicl 4, 4, 8, 56
18418; PWR5-NEXT:    subfe 3, 3, 3
18419; PWR5-NEXT:    subc 5, 4, 5
18420; PWR5-NEXT:    subfe 4, 4, 4
18421; PWR5-NEXT:    blr
18422;
18423; PWR6-LABEL: ult_26_v2i64:
18424; PWR6:       # %bb.0:
18425; PWR6-NEXT:    lis 5, 21845
18426; PWR6-NEXT:    lis 6, 13107
18427; PWR6-NEXT:    ori 5, 5, 21845
18428; PWR6-NEXT:    rotldi 8, 4, 63
18429; PWR6-NEXT:    rotldi 9, 3, 63
18430; PWR6-NEXT:    rldimi 5, 5, 32, 0
18431; PWR6-NEXT:    and 8, 8, 5
18432; PWR6-NEXT:    and 5, 9, 5
18433; PWR6-NEXT:    ori 6, 6, 13107
18434; PWR6-NEXT:    sub 3, 3, 5
18435; PWR6-NEXT:    rldimi 6, 6, 32, 0
18436; PWR6-NEXT:    sub 4, 4, 8
18437; PWR6-NEXT:    and 8, 3, 6
18438; PWR6-NEXT:    rotldi 3, 3, 62
18439; PWR6-NEXT:    and 3, 3, 6
18440; PWR6-NEXT:    lis 7, 3855
18441; PWR6-NEXT:    and 5, 4, 6
18442; PWR6-NEXT:    rotldi 4, 4, 62
18443; PWR6-NEXT:    add 3, 8, 3
18444; PWR6-NEXT:    lis 9, 257
18445; PWR6-NEXT:    ori 7, 7, 3855
18446; PWR6-NEXT:    and 4, 4, 6
18447; PWR6-NEXT:    rldicl 6, 3, 60, 4
18448; PWR6-NEXT:    ori 9, 9, 257
18449; PWR6-NEXT:    rldimi 7, 7, 32, 0
18450; PWR6-NEXT:    add 4, 5, 4
18451; PWR6-NEXT:    add 3, 3, 6
18452; PWR6-NEXT:    rldimi 9, 9, 32, 0
18453; PWR6-NEXT:    rldicl 5, 4, 60, 4
18454; PWR6-NEXT:    and 3, 3, 7
18455; PWR6-NEXT:    add 4, 4, 5
18456; PWR6-NEXT:    mulld 3, 3, 9
18457; PWR6-NEXT:    and 4, 4, 7
18458; PWR6-NEXT:    rldicl 3, 3, 8, 56
18459; PWR6-NEXT:    li 5, 26
18460; PWR6-NEXT:    mulld 4, 4, 9
18461; PWR6-NEXT:    subc 6, 3, 5
18462; PWR6-NEXT:    rldicl 4, 4, 8, 56
18463; PWR6-NEXT:    subfe 3, 3, 3
18464; PWR6-NEXT:    subc 5, 4, 5
18465; PWR6-NEXT:    subfe 4, 4, 4
18466; PWR6-NEXT:    blr
18467;
18468; PWR7-LABEL: ult_26_v2i64:
18469; PWR7:       # %bb.0:
18470; PWR7-NEXT:    addi 3, 1, -32
18471; PWR7-NEXT:    li 5, 0
18472; PWR7-NEXT:    li 6, -1
18473; PWR7-NEXT:    stxvd2x 34, 0, 3
18474; PWR7-NEXT:    ld 3, -24(1)
18475; PWR7-NEXT:    ld 4, -32(1)
18476; PWR7-NEXT:    popcntd 3, 3
18477; PWR7-NEXT:    popcntd 4, 4
18478; PWR7-NEXT:    cmpldi 3, 26
18479; PWR7-NEXT:    isellt 3, 6, 5
18480; PWR7-NEXT:    cmpldi 4, 26
18481; PWR7-NEXT:    isellt 4, 6, 5
18482; PWR7-NEXT:    std 3, -8(1)
18483; PWR7-NEXT:    addi 3, 1, -16
18484; PWR7-NEXT:    std 4, -16(1)
18485; PWR7-NEXT:    lxvd2x 34, 0, 3
18486; PWR7-NEXT:    blr
18487;
18488; PWR8-LABEL: ult_26_v2i64:
18489; PWR8:       # %bb.0:
18490; PWR8-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
18491; PWR8-NEXT:    vpopcntd 2, 2
18492; PWR8-NEXT:    addi 3, 3, .LCPI149_0@toc@l
18493; PWR8-NEXT:    lxvd2x 35, 0, 3
18494; PWR8-NEXT:    vcmpgtud 2, 3, 2
18495; PWR8-NEXT:    blr
18496;
18497; PWR9-LABEL: ult_26_v2i64:
18498; PWR9:       # %bb.0:
18499; PWR9-NEXT:    addis 3, 2, .LCPI149_0@toc@ha
18500; PWR9-NEXT:    vpopcntd 2, 2
18501; PWR9-NEXT:    addi 3, 3, .LCPI149_0@toc@l
18502; PWR9-NEXT:    lxvx 35, 0, 3
18503; PWR9-NEXT:    vcmpgtud 2, 3, 2
18504; PWR9-NEXT:    blr
18505  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18506  %3 = icmp ult <2 x i64> %2, <i64 26, i64 26>
18507  %4 = sext <2 x i1> %3 to <2 x i64>
18508  ret <2 x i64> %4
18509}
18510
18511define <2 x i64> @ugt_26_v2i64(<2 x i64> %0) {
18512; PWR5-LABEL: ugt_26_v2i64:
18513; PWR5:       # %bb.0:
18514; PWR5-NEXT:    lis 5, 21845
18515; PWR5-NEXT:    lis 6, 13107
18516; PWR5-NEXT:    ori 5, 5, 21845
18517; PWR5-NEXT:    rotldi 8, 4, 63
18518; PWR5-NEXT:    rotldi 9, 3, 63
18519; PWR5-NEXT:    rldimi 5, 5, 32, 0
18520; PWR5-NEXT:    and 8, 8, 5
18521; PWR5-NEXT:    and 5, 9, 5
18522; PWR5-NEXT:    ori 6, 6, 13107
18523; PWR5-NEXT:    sub 3, 3, 5
18524; PWR5-NEXT:    rldimi 6, 6, 32, 0
18525; PWR5-NEXT:    sub 4, 4, 8
18526; PWR5-NEXT:    and 8, 3, 6
18527; PWR5-NEXT:    rotldi 3, 3, 62
18528; PWR5-NEXT:    and 3, 3, 6
18529; PWR5-NEXT:    lis 7, 3855
18530; PWR5-NEXT:    and 5, 4, 6
18531; PWR5-NEXT:    rotldi 4, 4, 62
18532; PWR5-NEXT:    add 3, 8, 3
18533; PWR5-NEXT:    lis 9, 257
18534; PWR5-NEXT:    ori 7, 7, 3855
18535; PWR5-NEXT:    and 4, 4, 6
18536; PWR5-NEXT:    rldicl 6, 3, 60, 4
18537; PWR5-NEXT:    ori 9, 9, 257
18538; PWR5-NEXT:    rldimi 7, 7, 32, 0
18539; PWR5-NEXT:    add 4, 5, 4
18540; PWR5-NEXT:    add 3, 3, 6
18541; PWR5-NEXT:    rldimi 9, 9, 32, 0
18542; PWR5-NEXT:    rldicl 5, 4, 60, 4
18543; PWR5-NEXT:    and 3, 3, 7
18544; PWR5-NEXT:    add 4, 4, 5
18545; PWR5-NEXT:    mulld 3, 3, 9
18546; PWR5-NEXT:    and 4, 4, 7
18547; PWR5-NEXT:    rldicl 3, 3, 8, 56
18548; PWR5-NEXT:    mulld 4, 4, 9
18549; PWR5-NEXT:    li 5, 26
18550; PWR5-NEXT:    subfic 3, 3, 26
18551; PWR5-NEXT:    rldicl 4, 4, 8, 56
18552; PWR5-NEXT:    subfe 3, 5, 5
18553; PWR5-NEXT:    subfic 4, 4, 26
18554; PWR5-NEXT:    subfe 4, 5, 5
18555; PWR5-NEXT:    blr
18556;
18557; PWR6-LABEL: ugt_26_v2i64:
18558; PWR6:       # %bb.0:
18559; PWR6-NEXT:    lis 5, 21845
18560; PWR6-NEXT:    lis 6, 13107
18561; PWR6-NEXT:    ori 5, 5, 21845
18562; PWR6-NEXT:    rotldi 8, 4, 63
18563; PWR6-NEXT:    rotldi 9, 3, 63
18564; PWR6-NEXT:    rldimi 5, 5, 32, 0
18565; PWR6-NEXT:    and 8, 8, 5
18566; PWR6-NEXT:    and 5, 9, 5
18567; PWR6-NEXT:    ori 6, 6, 13107
18568; PWR6-NEXT:    sub 3, 3, 5
18569; PWR6-NEXT:    rldimi 6, 6, 32, 0
18570; PWR6-NEXT:    sub 4, 4, 8
18571; PWR6-NEXT:    and 8, 3, 6
18572; PWR6-NEXT:    rotldi 3, 3, 62
18573; PWR6-NEXT:    and 3, 3, 6
18574; PWR6-NEXT:    lis 7, 3855
18575; PWR6-NEXT:    and 5, 4, 6
18576; PWR6-NEXT:    rotldi 4, 4, 62
18577; PWR6-NEXT:    add 3, 8, 3
18578; PWR6-NEXT:    lis 9, 257
18579; PWR6-NEXT:    ori 7, 7, 3855
18580; PWR6-NEXT:    and 4, 4, 6
18581; PWR6-NEXT:    rldicl 6, 3, 60, 4
18582; PWR6-NEXT:    ori 9, 9, 257
18583; PWR6-NEXT:    rldimi 7, 7, 32, 0
18584; PWR6-NEXT:    add 4, 5, 4
18585; PWR6-NEXT:    add 3, 3, 6
18586; PWR6-NEXT:    rldimi 9, 9, 32, 0
18587; PWR6-NEXT:    rldicl 5, 4, 60, 4
18588; PWR6-NEXT:    and 3, 3, 7
18589; PWR6-NEXT:    add 4, 4, 5
18590; PWR6-NEXT:    mulld 3, 3, 9
18591; PWR6-NEXT:    and 4, 4, 7
18592; PWR6-NEXT:    rldicl 3, 3, 8, 56
18593; PWR6-NEXT:    mulld 4, 4, 9
18594; PWR6-NEXT:    li 5, 26
18595; PWR6-NEXT:    subfic 3, 3, 26
18596; PWR6-NEXT:    rldicl 4, 4, 8, 56
18597; PWR6-NEXT:    subfe 3, 5, 5
18598; PWR6-NEXT:    subfic 4, 4, 26
18599; PWR6-NEXT:    subfe 4, 5, 5
18600; PWR6-NEXT:    blr
18601;
18602; PWR7-LABEL: ugt_26_v2i64:
18603; PWR7:       # %bb.0:
18604; PWR7-NEXT:    addi 3, 1, -32
18605; PWR7-NEXT:    li 5, 0
18606; PWR7-NEXT:    li 6, -1
18607; PWR7-NEXT:    stxvd2x 34, 0, 3
18608; PWR7-NEXT:    ld 3, -24(1)
18609; PWR7-NEXT:    ld 4, -32(1)
18610; PWR7-NEXT:    popcntd 3, 3
18611; PWR7-NEXT:    popcntd 4, 4
18612; PWR7-NEXT:    cmpldi 3, 26
18613; PWR7-NEXT:    iselgt 3, 6, 5
18614; PWR7-NEXT:    cmpldi 4, 26
18615; PWR7-NEXT:    iselgt 4, 6, 5
18616; PWR7-NEXT:    std 3, -8(1)
18617; PWR7-NEXT:    addi 3, 1, -16
18618; PWR7-NEXT:    std 4, -16(1)
18619; PWR7-NEXT:    lxvd2x 34, 0, 3
18620; PWR7-NEXT:    blr
18621;
18622; PWR8-LABEL: ugt_26_v2i64:
18623; PWR8:       # %bb.0:
18624; PWR8-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
18625; PWR8-NEXT:    vpopcntd 2, 2
18626; PWR8-NEXT:    addi 3, 3, .LCPI150_0@toc@l
18627; PWR8-NEXT:    lxvd2x 35, 0, 3
18628; PWR8-NEXT:    vcmpgtud 2, 2, 3
18629; PWR8-NEXT:    blr
18630;
18631; PWR9-LABEL: ugt_26_v2i64:
18632; PWR9:       # %bb.0:
18633; PWR9-NEXT:    addis 3, 2, .LCPI150_0@toc@ha
18634; PWR9-NEXT:    vpopcntd 2, 2
18635; PWR9-NEXT:    addi 3, 3, .LCPI150_0@toc@l
18636; PWR9-NEXT:    lxvx 35, 0, 3
18637; PWR9-NEXT:    vcmpgtud 2, 2, 3
18638; PWR9-NEXT:    blr
18639  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18640  %3 = icmp ugt <2 x i64> %2, <i64 26, i64 26>
18641  %4 = sext <2 x i1> %3 to <2 x i64>
18642  ret <2 x i64> %4
18643}
18644
18645define <2 x i64> @ult_27_v2i64(<2 x i64> %0) {
18646; PWR5-LABEL: ult_27_v2i64:
18647; PWR5:       # %bb.0:
18648; PWR5-NEXT:    lis 5, 21845
18649; PWR5-NEXT:    lis 6, 13107
18650; PWR5-NEXT:    ori 5, 5, 21845
18651; PWR5-NEXT:    rotldi 8, 4, 63
18652; PWR5-NEXT:    rotldi 9, 3, 63
18653; PWR5-NEXT:    rldimi 5, 5, 32, 0
18654; PWR5-NEXT:    and 8, 8, 5
18655; PWR5-NEXT:    and 5, 9, 5
18656; PWR5-NEXT:    ori 6, 6, 13107
18657; PWR5-NEXT:    sub 3, 3, 5
18658; PWR5-NEXT:    rldimi 6, 6, 32, 0
18659; PWR5-NEXT:    sub 4, 4, 8
18660; PWR5-NEXT:    and 8, 3, 6
18661; PWR5-NEXT:    rotldi 3, 3, 62
18662; PWR5-NEXT:    and 3, 3, 6
18663; PWR5-NEXT:    lis 7, 3855
18664; PWR5-NEXT:    and 5, 4, 6
18665; PWR5-NEXT:    rotldi 4, 4, 62
18666; PWR5-NEXT:    add 3, 8, 3
18667; PWR5-NEXT:    lis 9, 257
18668; PWR5-NEXT:    ori 7, 7, 3855
18669; PWR5-NEXT:    and 4, 4, 6
18670; PWR5-NEXT:    rldicl 6, 3, 60, 4
18671; PWR5-NEXT:    ori 9, 9, 257
18672; PWR5-NEXT:    rldimi 7, 7, 32, 0
18673; PWR5-NEXT:    add 4, 5, 4
18674; PWR5-NEXT:    add 3, 3, 6
18675; PWR5-NEXT:    rldimi 9, 9, 32, 0
18676; PWR5-NEXT:    rldicl 5, 4, 60, 4
18677; PWR5-NEXT:    and 3, 3, 7
18678; PWR5-NEXT:    add 4, 4, 5
18679; PWR5-NEXT:    mulld 3, 3, 9
18680; PWR5-NEXT:    and 4, 4, 7
18681; PWR5-NEXT:    rldicl 3, 3, 8, 56
18682; PWR5-NEXT:    li 5, 27
18683; PWR5-NEXT:    mulld 4, 4, 9
18684; PWR5-NEXT:    subc 6, 3, 5
18685; PWR5-NEXT:    rldicl 4, 4, 8, 56
18686; PWR5-NEXT:    subfe 3, 3, 3
18687; PWR5-NEXT:    subc 5, 4, 5
18688; PWR5-NEXT:    subfe 4, 4, 4
18689; PWR5-NEXT:    blr
18690;
18691; PWR6-LABEL: ult_27_v2i64:
18692; PWR6:       # %bb.0:
18693; PWR6-NEXT:    lis 5, 21845
18694; PWR6-NEXT:    lis 6, 13107
18695; PWR6-NEXT:    ori 5, 5, 21845
18696; PWR6-NEXT:    rotldi 8, 4, 63
18697; PWR6-NEXT:    rotldi 9, 3, 63
18698; PWR6-NEXT:    rldimi 5, 5, 32, 0
18699; PWR6-NEXT:    and 8, 8, 5
18700; PWR6-NEXT:    and 5, 9, 5
18701; PWR6-NEXT:    ori 6, 6, 13107
18702; PWR6-NEXT:    sub 3, 3, 5
18703; PWR6-NEXT:    rldimi 6, 6, 32, 0
18704; PWR6-NEXT:    sub 4, 4, 8
18705; PWR6-NEXT:    and 8, 3, 6
18706; PWR6-NEXT:    rotldi 3, 3, 62
18707; PWR6-NEXT:    and 3, 3, 6
18708; PWR6-NEXT:    lis 7, 3855
18709; PWR6-NEXT:    and 5, 4, 6
18710; PWR6-NEXT:    rotldi 4, 4, 62
18711; PWR6-NEXT:    add 3, 8, 3
18712; PWR6-NEXT:    lis 9, 257
18713; PWR6-NEXT:    ori 7, 7, 3855
18714; PWR6-NEXT:    and 4, 4, 6
18715; PWR6-NEXT:    rldicl 6, 3, 60, 4
18716; PWR6-NEXT:    ori 9, 9, 257
18717; PWR6-NEXT:    rldimi 7, 7, 32, 0
18718; PWR6-NEXT:    add 4, 5, 4
18719; PWR6-NEXT:    add 3, 3, 6
18720; PWR6-NEXT:    rldimi 9, 9, 32, 0
18721; PWR6-NEXT:    rldicl 5, 4, 60, 4
18722; PWR6-NEXT:    and 3, 3, 7
18723; PWR6-NEXT:    add 4, 4, 5
18724; PWR6-NEXT:    mulld 3, 3, 9
18725; PWR6-NEXT:    and 4, 4, 7
18726; PWR6-NEXT:    rldicl 3, 3, 8, 56
18727; PWR6-NEXT:    li 5, 27
18728; PWR6-NEXT:    mulld 4, 4, 9
18729; PWR6-NEXT:    subc 6, 3, 5
18730; PWR6-NEXT:    rldicl 4, 4, 8, 56
18731; PWR6-NEXT:    subfe 3, 3, 3
18732; PWR6-NEXT:    subc 5, 4, 5
18733; PWR6-NEXT:    subfe 4, 4, 4
18734; PWR6-NEXT:    blr
18735;
18736; PWR7-LABEL: ult_27_v2i64:
18737; PWR7:       # %bb.0:
18738; PWR7-NEXT:    addi 3, 1, -32
18739; PWR7-NEXT:    li 5, 0
18740; PWR7-NEXT:    li 6, -1
18741; PWR7-NEXT:    stxvd2x 34, 0, 3
18742; PWR7-NEXT:    ld 3, -24(1)
18743; PWR7-NEXT:    ld 4, -32(1)
18744; PWR7-NEXT:    popcntd 3, 3
18745; PWR7-NEXT:    popcntd 4, 4
18746; PWR7-NEXT:    cmpldi 3, 27
18747; PWR7-NEXT:    isellt 3, 6, 5
18748; PWR7-NEXT:    cmpldi 4, 27
18749; PWR7-NEXT:    isellt 4, 6, 5
18750; PWR7-NEXT:    std 3, -8(1)
18751; PWR7-NEXT:    addi 3, 1, -16
18752; PWR7-NEXT:    std 4, -16(1)
18753; PWR7-NEXT:    lxvd2x 34, 0, 3
18754; PWR7-NEXT:    blr
18755;
18756; PWR8-LABEL: ult_27_v2i64:
18757; PWR8:       # %bb.0:
18758; PWR8-NEXT:    addis 3, 2, .LCPI151_0@toc@ha
18759; PWR8-NEXT:    vpopcntd 2, 2
18760; PWR8-NEXT:    addi 3, 3, .LCPI151_0@toc@l
18761; PWR8-NEXT:    lxvd2x 35, 0, 3
18762; PWR8-NEXT:    vcmpgtud 2, 3, 2
18763; PWR8-NEXT:    blr
18764;
18765; PWR9-LABEL: ult_27_v2i64:
18766; PWR9:       # %bb.0:
18767; PWR9-NEXT:    addis 3, 2, .LCPI151_0@toc@ha
18768; PWR9-NEXT:    vpopcntd 2, 2
18769; PWR9-NEXT:    addi 3, 3, .LCPI151_0@toc@l
18770; PWR9-NEXT:    lxvx 35, 0, 3
18771; PWR9-NEXT:    vcmpgtud 2, 3, 2
18772; PWR9-NEXT:    blr
18773  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18774  %3 = icmp ult <2 x i64> %2, <i64 27, i64 27>
18775  %4 = sext <2 x i1> %3 to <2 x i64>
18776  ret <2 x i64> %4
18777}
18778
18779define <2 x i64> @ugt_27_v2i64(<2 x i64> %0) {
18780; PWR5-LABEL: ugt_27_v2i64:
18781; PWR5:       # %bb.0:
18782; PWR5-NEXT:    lis 5, 21845
18783; PWR5-NEXT:    lis 6, 13107
18784; PWR5-NEXT:    ori 5, 5, 21845
18785; PWR5-NEXT:    rotldi 8, 4, 63
18786; PWR5-NEXT:    rotldi 9, 3, 63
18787; PWR5-NEXT:    rldimi 5, 5, 32, 0
18788; PWR5-NEXT:    and 8, 8, 5
18789; PWR5-NEXT:    and 5, 9, 5
18790; PWR5-NEXT:    ori 6, 6, 13107
18791; PWR5-NEXT:    sub 3, 3, 5
18792; PWR5-NEXT:    rldimi 6, 6, 32, 0
18793; PWR5-NEXT:    sub 4, 4, 8
18794; PWR5-NEXT:    and 8, 3, 6
18795; PWR5-NEXT:    rotldi 3, 3, 62
18796; PWR5-NEXT:    and 3, 3, 6
18797; PWR5-NEXT:    lis 7, 3855
18798; PWR5-NEXT:    and 5, 4, 6
18799; PWR5-NEXT:    rotldi 4, 4, 62
18800; PWR5-NEXT:    add 3, 8, 3
18801; PWR5-NEXT:    lis 9, 257
18802; PWR5-NEXT:    ori 7, 7, 3855
18803; PWR5-NEXT:    and 4, 4, 6
18804; PWR5-NEXT:    rldicl 6, 3, 60, 4
18805; PWR5-NEXT:    ori 9, 9, 257
18806; PWR5-NEXT:    rldimi 7, 7, 32, 0
18807; PWR5-NEXT:    add 4, 5, 4
18808; PWR5-NEXT:    add 3, 3, 6
18809; PWR5-NEXT:    rldimi 9, 9, 32, 0
18810; PWR5-NEXT:    rldicl 5, 4, 60, 4
18811; PWR5-NEXT:    and 3, 3, 7
18812; PWR5-NEXT:    add 4, 4, 5
18813; PWR5-NEXT:    mulld 3, 3, 9
18814; PWR5-NEXT:    and 4, 4, 7
18815; PWR5-NEXT:    rldicl 3, 3, 8, 56
18816; PWR5-NEXT:    mulld 4, 4, 9
18817; PWR5-NEXT:    li 5, 27
18818; PWR5-NEXT:    subfic 3, 3, 27
18819; PWR5-NEXT:    rldicl 4, 4, 8, 56
18820; PWR5-NEXT:    subfe 3, 5, 5
18821; PWR5-NEXT:    subfic 4, 4, 27
18822; PWR5-NEXT:    subfe 4, 5, 5
18823; PWR5-NEXT:    blr
18824;
18825; PWR6-LABEL: ugt_27_v2i64:
18826; PWR6:       # %bb.0:
18827; PWR6-NEXT:    lis 5, 21845
18828; PWR6-NEXT:    lis 6, 13107
18829; PWR6-NEXT:    ori 5, 5, 21845
18830; PWR6-NEXT:    rotldi 8, 4, 63
18831; PWR6-NEXT:    rotldi 9, 3, 63
18832; PWR6-NEXT:    rldimi 5, 5, 32, 0
18833; PWR6-NEXT:    and 8, 8, 5
18834; PWR6-NEXT:    and 5, 9, 5
18835; PWR6-NEXT:    ori 6, 6, 13107
18836; PWR6-NEXT:    sub 3, 3, 5
18837; PWR6-NEXT:    rldimi 6, 6, 32, 0
18838; PWR6-NEXT:    sub 4, 4, 8
18839; PWR6-NEXT:    and 8, 3, 6
18840; PWR6-NEXT:    rotldi 3, 3, 62
18841; PWR6-NEXT:    and 3, 3, 6
18842; PWR6-NEXT:    lis 7, 3855
18843; PWR6-NEXT:    and 5, 4, 6
18844; PWR6-NEXT:    rotldi 4, 4, 62
18845; PWR6-NEXT:    add 3, 8, 3
18846; PWR6-NEXT:    lis 9, 257
18847; PWR6-NEXT:    ori 7, 7, 3855
18848; PWR6-NEXT:    and 4, 4, 6
18849; PWR6-NEXT:    rldicl 6, 3, 60, 4
18850; PWR6-NEXT:    ori 9, 9, 257
18851; PWR6-NEXT:    rldimi 7, 7, 32, 0
18852; PWR6-NEXT:    add 4, 5, 4
18853; PWR6-NEXT:    add 3, 3, 6
18854; PWR6-NEXT:    rldimi 9, 9, 32, 0
18855; PWR6-NEXT:    rldicl 5, 4, 60, 4
18856; PWR6-NEXT:    and 3, 3, 7
18857; PWR6-NEXT:    add 4, 4, 5
18858; PWR6-NEXT:    mulld 3, 3, 9
18859; PWR6-NEXT:    and 4, 4, 7
18860; PWR6-NEXT:    rldicl 3, 3, 8, 56
18861; PWR6-NEXT:    mulld 4, 4, 9
18862; PWR6-NEXT:    li 5, 27
18863; PWR6-NEXT:    subfic 3, 3, 27
18864; PWR6-NEXT:    rldicl 4, 4, 8, 56
18865; PWR6-NEXT:    subfe 3, 5, 5
18866; PWR6-NEXT:    subfic 4, 4, 27
18867; PWR6-NEXT:    subfe 4, 5, 5
18868; PWR6-NEXT:    blr
18869;
18870; PWR7-LABEL: ugt_27_v2i64:
18871; PWR7:       # %bb.0:
18872; PWR7-NEXT:    addi 3, 1, -32
18873; PWR7-NEXT:    li 5, 0
18874; PWR7-NEXT:    li 6, -1
18875; PWR7-NEXT:    stxvd2x 34, 0, 3
18876; PWR7-NEXT:    ld 3, -24(1)
18877; PWR7-NEXT:    ld 4, -32(1)
18878; PWR7-NEXT:    popcntd 3, 3
18879; PWR7-NEXT:    popcntd 4, 4
18880; PWR7-NEXT:    cmpldi 3, 27
18881; PWR7-NEXT:    iselgt 3, 6, 5
18882; PWR7-NEXT:    cmpldi 4, 27
18883; PWR7-NEXT:    iselgt 4, 6, 5
18884; PWR7-NEXT:    std 3, -8(1)
18885; PWR7-NEXT:    addi 3, 1, -16
18886; PWR7-NEXT:    std 4, -16(1)
18887; PWR7-NEXT:    lxvd2x 34, 0, 3
18888; PWR7-NEXT:    blr
18889;
18890; PWR8-LABEL: ugt_27_v2i64:
18891; PWR8:       # %bb.0:
18892; PWR8-NEXT:    addis 3, 2, .LCPI152_0@toc@ha
18893; PWR8-NEXT:    vpopcntd 2, 2
18894; PWR8-NEXT:    addi 3, 3, .LCPI152_0@toc@l
18895; PWR8-NEXT:    lxvd2x 35, 0, 3
18896; PWR8-NEXT:    vcmpgtud 2, 2, 3
18897; PWR8-NEXT:    blr
18898;
18899; PWR9-LABEL: ugt_27_v2i64:
18900; PWR9:       # %bb.0:
18901; PWR9-NEXT:    addis 3, 2, .LCPI152_0@toc@ha
18902; PWR9-NEXT:    vpopcntd 2, 2
18903; PWR9-NEXT:    addi 3, 3, .LCPI152_0@toc@l
18904; PWR9-NEXT:    lxvx 35, 0, 3
18905; PWR9-NEXT:    vcmpgtud 2, 2, 3
18906; PWR9-NEXT:    blr
18907  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
18908  %3 = icmp ugt <2 x i64> %2, <i64 27, i64 27>
18909  %4 = sext <2 x i1> %3 to <2 x i64>
18910  ret <2 x i64> %4
18911}
18912
18913define <2 x i64> @ult_28_v2i64(<2 x i64> %0) {
18914; PWR5-LABEL: ult_28_v2i64:
18915; PWR5:       # %bb.0:
18916; PWR5-NEXT:    lis 5, 21845
18917; PWR5-NEXT:    lis 6, 13107
18918; PWR5-NEXT:    ori 5, 5, 21845
18919; PWR5-NEXT:    rotldi 8, 4, 63
18920; PWR5-NEXT:    rotldi 9, 3, 63
18921; PWR5-NEXT:    rldimi 5, 5, 32, 0
18922; PWR5-NEXT:    and 8, 8, 5
18923; PWR5-NEXT:    and 5, 9, 5
18924; PWR5-NEXT:    ori 6, 6, 13107
18925; PWR5-NEXT:    sub 3, 3, 5
18926; PWR5-NEXT:    rldimi 6, 6, 32, 0
18927; PWR5-NEXT:    sub 4, 4, 8
18928; PWR5-NEXT:    and 8, 3, 6
18929; PWR5-NEXT:    rotldi 3, 3, 62
18930; PWR5-NEXT:    and 3, 3, 6
18931; PWR5-NEXT:    lis 7, 3855
18932; PWR5-NEXT:    and 5, 4, 6
18933; PWR5-NEXT:    rotldi 4, 4, 62
18934; PWR5-NEXT:    add 3, 8, 3
18935; PWR5-NEXT:    lis 9, 257
18936; PWR5-NEXT:    ori 7, 7, 3855
18937; PWR5-NEXT:    and 4, 4, 6
18938; PWR5-NEXT:    rldicl 6, 3, 60, 4
18939; PWR5-NEXT:    ori 9, 9, 257
18940; PWR5-NEXT:    rldimi 7, 7, 32, 0
18941; PWR5-NEXT:    add 4, 5, 4
18942; PWR5-NEXT:    add 3, 3, 6
18943; PWR5-NEXT:    rldimi 9, 9, 32, 0
18944; PWR5-NEXT:    rldicl 5, 4, 60, 4
18945; PWR5-NEXT:    and 3, 3, 7
18946; PWR5-NEXT:    add 4, 4, 5
18947; PWR5-NEXT:    mulld 3, 3, 9
18948; PWR5-NEXT:    and 4, 4, 7
18949; PWR5-NEXT:    rldicl 3, 3, 8, 56
18950; PWR5-NEXT:    li 5, 28
18951; PWR5-NEXT:    mulld 4, 4, 9
18952; PWR5-NEXT:    subc 6, 3, 5
18953; PWR5-NEXT:    rldicl 4, 4, 8, 56
18954; PWR5-NEXT:    subfe 3, 3, 3
18955; PWR5-NEXT:    subc 5, 4, 5
18956; PWR5-NEXT:    subfe 4, 4, 4
18957; PWR5-NEXT:    blr
18958;
18959; PWR6-LABEL: ult_28_v2i64:
18960; PWR6:       # %bb.0:
18961; PWR6-NEXT:    lis 5, 21845
18962; PWR6-NEXT:    lis 6, 13107
18963; PWR6-NEXT:    ori 5, 5, 21845
18964; PWR6-NEXT:    rotldi 8, 4, 63
18965; PWR6-NEXT:    rotldi 9, 3, 63
18966; PWR6-NEXT:    rldimi 5, 5, 32, 0
18967; PWR6-NEXT:    and 8, 8, 5
18968; PWR6-NEXT:    and 5, 9, 5
18969; PWR6-NEXT:    ori 6, 6, 13107
18970; PWR6-NEXT:    sub 3, 3, 5
18971; PWR6-NEXT:    rldimi 6, 6, 32, 0
18972; PWR6-NEXT:    sub 4, 4, 8
18973; PWR6-NEXT:    and 8, 3, 6
18974; PWR6-NEXT:    rotldi 3, 3, 62
18975; PWR6-NEXT:    and 3, 3, 6
18976; PWR6-NEXT:    lis 7, 3855
18977; PWR6-NEXT:    and 5, 4, 6
18978; PWR6-NEXT:    rotldi 4, 4, 62
18979; PWR6-NEXT:    add 3, 8, 3
18980; PWR6-NEXT:    lis 9, 257
18981; PWR6-NEXT:    ori 7, 7, 3855
18982; PWR6-NEXT:    and 4, 4, 6
18983; PWR6-NEXT:    rldicl 6, 3, 60, 4
18984; PWR6-NEXT:    ori 9, 9, 257
18985; PWR6-NEXT:    rldimi 7, 7, 32, 0
18986; PWR6-NEXT:    add 4, 5, 4
18987; PWR6-NEXT:    add 3, 3, 6
18988; PWR6-NEXT:    rldimi 9, 9, 32, 0
18989; PWR6-NEXT:    rldicl 5, 4, 60, 4
18990; PWR6-NEXT:    and 3, 3, 7
18991; PWR6-NEXT:    add 4, 4, 5
18992; PWR6-NEXT:    mulld 3, 3, 9
18993; PWR6-NEXT:    and 4, 4, 7
18994; PWR6-NEXT:    rldicl 3, 3, 8, 56
18995; PWR6-NEXT:    li 5, 28
18996; PWR6-NEXT:    mulld 4, 4, 9
18997; PWR6-NEXT:    subc 6, 3, 5
18998; PWR6-NEXT:    rldicl 4, 4, 8, 56
18999; PWR6-NEXT:    subfe 3, 3, 3
19000; PWR6-NEXT:    subc 5, 4, 5
19001; PWR6-NEXT:    subfe 4, 4, 4
19002; PWR6-NEXT:    blr
19003;
19004; PWR7-LABEL: ult_28_v2i64:
19005; PWR7:       # %bb.0:
19006; PWR7-NEXT:    addi 3, 1, -32
19007; PWR7-NEXT:    li 5, 0
19008; PWR7-NEXT:    li 6, -1
19009; PWR7-NEXT:    stxvd2x 34, 0, 3
19010; PWR7-NEXT:    ld 3, -24(1)
19011; PWR7-NEXT:    ld 4, -32(1)
19012; PWR7-NEXT:    popcntd 3, 3
19013; PWR7-NEXT:    popcntd 4, 4
19014; PWR7-NEXT:    cmpldi 3, 28
19015; PWR7-NEXT:    isellt 3, 6, 5
19016; PWR7-NEXT:    cmpldi 4, 28
19017; PWR7-NEXT:    isellt 4, 6, 5
19018; PWR7-NEXT:    std 3, -8(1)
19019; PWR7-NEXT:    addi 3, 1, -16
19020; PWR7-NEXT:    std 4, -16(1)
19021; PWR7-NEXT:    lxvd2x 34, 0, 3
19022; PWR7-NEXT:    blr
19023;
19024; PWR8-LABEL: ult_28_v2i64:
19025; PWR8:       # %bb.0:
19026; PWR8-NEXT:    addis 3, 2, .LCPI153_0@toc@ha
19027; PWR8-NEXT:    vpopcntd 2, 2
19028; PWR8-NEXT:    addi 3, 3, .LCPI153_0@toc@l
19029; PWR8-NEXT:    lxvd2x 35, 0, 3
19030; PWR8-NEXT:    vcmpgtud 2, 3, 2
19031; PWR8-NEXT:    blr
19032;
19033; PWR9-LABEL: ult_28_v2i64:
19034; PWR9:       # %bb.0:
19035; PWR9-NEXT:    addis 3, 2, .LCPI153_0@toc@ha
19036; PWR9-NEXT:    vpopcntd 2, 2
19037; PWR9-NEXT:    addi 3, 3, .LCPI153_0@toc@l
19038; PWR9-NEXT:    lxvx 35, 0, 3
19039; PWR9-NEXT:    vcmpgtud 2, 3, 2
19040; PWR9-NEXT:    blr
19041  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19042  %3 = icmp ult <2 x i64> %2, <i64 28, i64 28>
19043  %4 = sext <2 x i1> %3 to <2 x i64>
19044  ret <2 x i64> %4
19045}
19046
19047define <2 x i64> @ugt_28_v2i64(<2 x i64> %0) {
19048; PWR5-LABEL: ugt_28_v2i64:
19049; PWR5:       # %bb.0:
19050; PWR5-NEXT:    lis 5, 21845
19051; PWR5-NEXT:    lis 6, 13107
19052; PWR5-NEXT:    ori 5, 5, 21845
19053; PWR5-NEXT:    rotldi 8, 4, 63
19054; PWR5-NEXT:    rotldi 9, 3, 63
19055; PWR5-NEXT:    rldimi 5, 5, 32, 0
19056; PWR5-NEXT:    and 8, 8, 5
19057; PWR5-NEXT:    and 5, 9, 5
19058; PWR5-NEXT:    ori 6, 6, 13107
19059; PWR5-NEXT:    sub 3, 3, 5
19060; PWR5-NEXT:    rldimi 6, 6, 32, 0
19061; PWR5-NEXT:    sub 4, 4, 8
19062; PWR5-NEXT:    and 8, 3, 6
19063; PWR5-NEXT:    rotldi 3, 3, 62
19064; PWR5-NEXT:    and 3, 3, 6
19065; PWR5-NEXT:    lis 7, 3855
19066; PWR5-NEXT:    and 5, 4, 6
19067; PWR5-NEXT:    rotldi 4, 4, 62
19068; PWR5-NEXT:    add 3, 8, 3
19069; PWR5-NEXT:    lis 9, 257
19070; PWR5-NEXT:    ori 7, 7, 3855
19071; PWR5-NEXT:    and 4, 4, 6
19072; PWR5-NEXT:    rldicl 6, 3, 60, 4
19073; PWR5-NEXT:    ori 9, 9, 257
19074; PWR5-NEXT:    rldimi 7, 7, 32, 0
19075; PWR5-NEXT:    add 4, 5, 4
19076; PWR5-NEXT:    add 3, 3, 6
19077; PWR5-NEXT:    rldimi 9, 9, 32, 0
19078; PWR5-NEXT:    rldicl 5, 4, 60, 4
19079; PWR5-NEXT:    and 3, 3, 7
19080; PWR5-NEXT:    add 4, 4, 5
19081; PWR5-NEXT:    mulld 3, 3, 9
19082; PWR5-NEXT:    and 4, 4, 7
19083; PWR5-NEXT:    rldicl 3, 3, 8, 56
19084; PWR5-NEXT:    mulld 4, 4, 9
19085; PWR5-NEXT:    li 5, 28
19086; PWR5-NEXT:    subfic 3, 3, 28
19087; PWR5-NEXT:    rldicl 4, 4, 8, 56
19088; PWR5-NEXT:    subfe 3, 5, 5
19089; PWR5-NEXT:    subfic 4, 4, 28
19090; PWR5-NEXT:    subfe 4, 5, 5
19091; PWR5-NEXT:    blr
19092;
19093; PWR6-LABEL: ugt_28_v2i64:
19094; PWR6:       # %bb.0:
19095; PWR6-NEXT:    lis 5, 21845
19096; PWR6-NEXT:    lis 6, 13107
19097; PWR6-NEXT:    ori 5, 5, 21845
19098; PWR6-NEXT:    rotldi 8, 4, 63
19099; PWR6-NEXT:    rotldi 9, 3, 63
19100; PWR6-NEXT:    rldimi 5, 5, 32, 0
19101; PWR6-NEXT:    and 8, 8, 5
19102; PWR6-NEXT:    and 5, 9, 5
19103; PWR6-NEXT:    ori 6, 6, 13107
19104; PWR6-NEXT:    sub 3, 3, 5
19105; PWR6-NEXT:    rldimi 6, 6, 32, 0
19106; PWR6-NEXT:    sub 4, 4, 8
19107; PWR6-NEXT:    and 8, 3, 6
19108; PWR6-NEXT:    rotldi 3, 3, 62
19109; PWR6-NEXT:    and 3, 3, 6
19110; PWR6-NEXT:    lis 7, 3855
19111; PWR6-NEXT:    and 5, 4, 6
19112; PWR6-NEXT:    rotldi 4, 4, 62
19113; PWR6-NEXT:    add 3, 8, 3
19114; PWR6-NEXT:    lis 9, 257
19115; PWR6-NEXT:    ori 7, 7, 3855
19116; PWR6-NEXT:    and 4, 4, 6
19117; PWR6-NEXT:    rldicl 6, 3, 60, 4
19118; PWR6-NEXT:    ori 9, 9, 257
19119; PWR6-NEXT:    rldimi 7, 7, 32, 0
19120; PWR6-NEXT:    add 4, 5, 4
19121; PWR6-NEXT:    add 3, 3, 6
19122; PWR6-NEXT:    rldimi 9, 9, 32, 0
19123; PWR6-NEXT:    rldicl 5, 4, 60, 4
19124; PWR6-NEXT:    and 3, 3, 7
19125; PWR6-NEXT:    add 4, 4, 5
19126; PWR6-NEXT:    mulld 3, 3, 9
19127; PWR6-NEXT:    and 4, 4, 7
19128; PWR6-NEXT:    rldicl 3, 3, 8, 56
19129; PWR6-NEXT:    mulld 4, 4, 9
19130; PWR6-NEXT:    li 5, 28
19131; PWR6-NEXT:    subfic 3, 3, 28
19132; PWR6-NEXT:    rldicl 4, 4, 8, 56
19133; PWR6-NEXT:    subfe 3, 5, 5
19134; PWR6-NEXT:    subfic 4, 4, 28
19135; PWR6-NEXT:    subfe 4, 5, 5
19136; PWR6-NEXT:    blr
19137;
19138; PWR7-LABEL: ugt_28_v2i64:
19139; PWR7:       # %bb.0:
19140; PWR7-NEXT:    addi 3, 1, -32
19141; PWR7-NEXT:    li 5, 0
19142; PWR7-NEXT:    li 6, -1
19143; PWR7-NEXT:    stxvd2x 34, 0, 3
19144; PWR7-NEXT:    ld 3, -24(1)
19145; PWR7-NEXT:    ld 4, -32(1)
19146; PWR7-NEXT:    popcntd 3, 3
19147; PWR7-NEXT:    popcntd 4, 4
19148; PWR7-NEXT:    cmpldi 3, 28
19149; PWR7-NEXT:    iselgt 3, 6, 5
19150; PWR7-NEXT:    cmpldi 4, 28
19151; PWR7-NEXT:    iselgt 4, 6, 5
19152; PWR7-NEXT:    std 3, -8(1)
19153; PWR7-NEXT:    addi 3, 1, -16
19154; PWR7-NEXT:    std 4, -16(1)
19155; PWR7-NEXT:    lxvd2x 34, 0, 3
19156; PWR7-NEXT:    blr
19157;
19158; PWR8-LABEL: ugt_28_v2i64:
19159; PWR8:       # %bb.0:
19160; PWR8-NEXT:    addis 3, 2, .LCPI154_0@toc@ha
19161; PWR8-NEXT:    vpopcntd 2, 2
19162; PWR8-NEXT:    addi 3, 3, .LCPI154_0@toc@l
19163; PWR8-NEXT:    lxvd2x 35, 0, 3
19164; PWR8-NEXT:    vcmpgtud 2, 2, 3
19165; PWR8-NEXT:    blr
19166;
19167; PWR9-LABEL: ugt_28_v2i64:
19168; PWR9:       # %bb.0:
19169; PWR9-NEXT:    addis 3, 2, .LCPI154_0@toc@ha
19170; PWR9-NEXT:    vpopcntd 2, 2
19171; PWR9-NEXT:    addi 3, 3, .LCPI154_0@toc@l
19172; PWR9-NEXT:    lxvx 35, 0, 3
19173; PWR9-NEXT:    vcmpgtud 2, 2, 3
19174; PWR9-NEXT:    blr
19175  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19176  %3 = icmp ugt <2 x i64> %2, <i64 28, i64 28>
19177  %4 = sext <2 x i1> %3 to <2 x i64>
19178  ret <2 x i64> %4
19179}
19180
19181define <2 x i64> @ult_29_v2i64(<2 x i64> %0) {
19182; PWR5-LABEL: ult_29_v2i64:
19183; PWR5:       # %bb.0:
19184; PWR5-NEXT:    lis 5, 21845
19185; PWR5-NEXT:    lis 6, 13107
19186; PWR5-NEXT:    ori 5, 5, 21845
19187; PWR5-NEXT:    rotldi 8, 4, 63
19188; PWR5-NEXT:    rotldi 9, 3, 63
19189; PWR5-NEXT:    rldimi 5, 5, 32, 0
19190; PWR5-NEXT:    and 8, 8, 5
19191; PWR5-NEXT:    and 5, 9, 5
19192; PWR5-NEXT:    ori 6, 6, 13107
19193; PWR5-NEXT:    sub 3, 3, 5
19194; PWR5-NEXT:    rldimi 6, 6, 32, 0
19195; PWR5-NEXT:    sub 4, 4, 8
19196; PWR5-NEXT:    and 8, 3, 6
19197; PWR5-NEXT:    rotldi 3, 3, 62
19198; PWR5-NEXT:    and 3, 3, 6
19199; PWR5-NEXT:    lis 7, 3855
19200; PWR5-NEXT:    and 5, 4, 6
19201; PWR5-NEXT:    rotldi 4, 4, 62
19202; PWR5-NEXT:    add 3, 8, 3
19203; PWR5-NEXT:    lis 9, 257
19204; PWR5-NEXT:    ori 7, 7, 3855
19205; PWR5-NEXT:    and 4, 4, 6
19206; PWR5-NEXT:    rldicl 6, 3, 60, 4
19207; PWR5-NEXT:    ori 9, 9, 257
19208; PWR5-NEXT:    rldimi 7, 7, 32, 0
19209; PWR5-NEXT:    add 4, 5, 4
19210; PWR5-NEXT:    add 3, 3, 6
19211; PWR5-NEXT:    rldimi 9, 9, 32, 0
19212; PWR5-NEXT:    rldicl 5, 4, 60, 4
19213; PWR5-NEXT:    and 3, 3, 7
19214; PWR5-NEXT:    add 4, 4, 5
19215; PWR5-NEXT:    mulld 3, 3, 9
19216; PWR5-NEXT:    and 4, 4, 7
19217; PWR5-NEXT:    rldicl 3, 3, 8, 56
19218; PWR5-NEXT:    li 5, 29
19219; PWR5-NEXT:    mulld 4, 4, 9
19220; PWR5-NEXT:    subc 6, 3, 5
19221; PWR5-NEXT:    rldicl 4, 4, 8, 56
19222; PWR5-NEXT:    subfe 3, 3, 3
19223; PWR5-NEXT:    subc 5, 4, 5
19224; PWR5-NEXT:    subfe 4, 4, 4
19225; PWR5-NEXT:    blr
19226;
19227; PWR6-LABEL: ult_29_v2i64:
19228; PWR6:       # %bb.0:
19229; PWR6-NEXT:    lis 5, 21845
19230; PWR6-NEXT:    lis 6, 13107
19231; PWR6-NEXT:    ori 5, 5, 21845
19232; PWR6-NEXT:    rotldi 8, 4, 63
19233; PWR6-NEXT:    rotldi 9, 3, 63
19234; PWR6-NEXT:    rldimi 5, 5, 32, 0
19235; PWR6-NEXT:    and 8, 8, 5
19236; PWR6-NEXT:    and 5, 9, 5
19237; PWR6-NEXT:    ori 6, 6, 13107
19238; PWR6-NEXT:    sub 3, 3, 5
19239; PWR6-NEXT:    rldimi 6, 6, 32, 0
19240; PWR6-NEXT:    sub 4, 4, 8
19241; PWR6-NEXT:    and 8, 3, 6
19242; PWR6-NEXT:    rotldi 3, 3, 62
19243; PWR6-NEXT:    and 3, 3, 6
19244; PWR6-NEXT:    lis 7, 3855
19245; PWR6-NEXT:    and 5, 4, 6
19246; PWR6-NEXT:    rotldi 4, 4, 62
19247; PWR6-NEXT:    add 3, 8, 3
19248; PWR6-NEXT:    lis 9, 257
19249; PWR6-NEXT:    ori 7, 7, 3855
19250; PWR6-NEXT:    and 4, 4, 6
19251; PWR6-NEXT:    rldicl 6, 3, 60, 4
19252; PWR6-NEXT:    ori 9, 9, 257
19253; PWR6-NEXT:    rldimi 7, 7, 32, 0
19254; PWR6-NEXT:    add 4, 5, 4
19255; PWR6-NEXT:    add 3, 3, 6
19256; PWR6-NEXT:    rldimi 9, 9, 32, 0
19257; PWR6-NEXT:    rldicl 5, 4, 60, 4
19258; PWR6-NEXT:    and 3, 3, 7
19259; PWR6-NEXT:    add 4, 4, 5
19260; PWR6-NEXT:    mulld 3, 3, 9
19261; PWR6-NEXT:    and 4, 4, 7
19262; PWR6-NEXT:    rldicl 3, 3, 8, 56
19263; PWR6-NEXT:    li 5, 29
19264; PWR6-NEXT:    mulld 4, 4, 9
19265; PWR6-NEXT:    subc 6, 3, 5
19266; PWR6-NEXT:    rldicl 4, 4, 8, 56
19267; PWR6-NEXT:    subfe 3, 3, 3
19268; PWR6-NEXT:    subc 5, 4, 5
19269; PWR6-NEXT:    subfe 4, 4, 4
19270; PWR6-NEXT:    blr
19271;
19272; PWR7-LABEL: ult_29_v2i64:
19273; PWR7:       # %bb.0:
19274; PWR7-NEXT:    addi 3, 1, -32
19275; PWR7-NEXT:    li 5, 0
19276; PWR7-NEXT:    li 6, -1
19277; PWR7-NEXT:    stxvd2x 34, 0, 3
19278; PWR7-NEXT:    ld 3, -24(1)
19279; PWR7-NEXT:    ld 4, -32(1)
19280; PWR7-NEXT:    popcntd 3, 3
19281; PWR7-NEXT:    popcntd 4, 4
19282; PWR7-NEXT:    cmpldi 3, 29
19283; PWR7-NEXT:    isellt 3, 6, 5
19284; PWR7-NEXT:    cmpldi 4, 29
19285; PWR7-NEXT:    isellt 4, 6, 5
19286; PWR7-NEXT:    std 3, -8(1)
19287; PWR7-NEXT:    addi 3, 1, -16
19288; PWR7-NEXT:    std 4, -16(1)
19289; PWR7-NEXT:    lxvd2x 34, 0, 3
19290; PWR7-NEXT:    blr
19291;
19292; PWR8-LABEL: ult_29_v2i64:
19293; PWR8:       # %bb.0:
19294; PWR8-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
19295; PWR8-NEXT:    vpopcntd 2, 2
19296; PWR8-NEXT:    addi 3, 3, .LCPI155_0@toc@l
19297; PWR8-NEXT:    lxvd2x 35, 0, 3
19298; PWR8-NEXT:    vcmpgtud 2, 3, 2
19299; PWR8-NEXT:    blr
19300;
19301; PWR9-LABEL: ult_29_v2i64:
19302; PWR9:       # %bb.0:
19303; PWR9-NEXT:    addis 3, 2, .LCPI155_0@toc@ha
19304; PWR9-NEXT:    vpopcntd 2, 2
19305; PWR9-NEXT:    addi 3, 3, .LCPI155_0@toc@l
19306; PWR9-NEXT:    lxvx 35, 0, 3
19307; PWR9-NEXT:    vcmpgtud 2, 3, 2
19308; PWR9-NEXT:    blr
19309  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19310  %3 = icmp ult <2 x i64> %2, <i64 29, i64 29>
19311  %4 = sext <2 x i1> %3 to <2 x i64>
19312  ret <2 x i64> %4
19313}
19314
19315define <2 x i64> @ugt_29_v2i64(<2 x i64> %0) {
19316; PWR5-LABEL: ugt_29_v2i64:
19317; PWR5:       # %bb.0:
19318; PWR5-NEXT:    lis 5, 21845
19319; PWR5-NEXT:    lis 6, 13107
19320; PWR5-NEXT:    ori 5, 5, 21845
19321; PWR5-NEXT:    rotldi 8, 4, 63
19322; PWR5-NEXT:    rotldi 9, 3, 63
19323; PWR5-NEXT:    rldimi 5, 5, 32, 0
19324; PWR5-NEXT:    and 8, 8, 5
19325; PWR5-NEXT:    and 5, 9, 5
19326; PWR5-NEXT:    ori 6, 6, 13107
19327; PWR5-NEXT:    sub 3, 3, 5
19328; PWR5-NEXT:    rldimi 6, 6, 32, 0
19329; PWR5-NEXT:    sub 4, 4, 8
19330; PWR5-NEXT:    and 8, 3, 6
19331; PWR5-NEXT:    rotldi 3, 3, 62
19332; PWR5-NEXT:    and 3, 3, 6
19333; PWR5-NEXT:    lis 7, 3855
19334; PWR5-NEXT:    and 5, 4, 6
19335; PWR5-NEXT:    rotldi 4, 4, 62
19336; PWR5-NEXT:    add 3, 8, 3
19337; PWR5-NEXT:    lis 9, 257
19338; PWR5-NEXT:    ori 7, 7, 3855
19339; PWR5-NEXT:    and 4, 4, 6
19340; PWR5-NEXT:    rldicl 6, 3, 60, 4
19341; PWR5-NEXT:    ori 9, 9, 257
19342; PWR5-NEXT:    rldimi 7, 7, 32, 0
19343; PWR5-NEXT:    add 4, 5, 4
19344; PWR5-NEXT:    add 3, 3, 6
19345; PWR5-NEXT:    rldimi 9, 9, 32, 0
19346; PWR5-NEXT:    rldicl 5, 4, 60, 4
19347; PWR5-NEXT:    and 3, 3, 7
19348; PWR5-NEXT:    add 4, 4, 5
19349; PWR5-NEXT:    mulld 3, 3, 9
19350; PWR5-NEXT:    and 4, 4, 7
19351; PWR5-NEXT:    rldicl 3, 3, 8, 56
19352; PWR5-NEXT:    mulld 4, 4, 9
19353; PWR5-NEXT:    li 5, 29
19354; PWR5-NEXT:    subfic 3, 3, 29
19355; PWR5-NEXT:    rldicl 4, 4, 8, 56
19356; PWR5-NEXT:    subfe 3, 5, 5
19357; PWR5-NEXT:    subfic 4, 4, 29
19358; PWR5-NEXT:    subfe 4, 5, 5
19359; PWR5-NEXT:    blr
19360;
19361; PWR6-LABEL: ugt_29_v2i64:
19362; PWR6:       # %bb.0:
19363; PWR6-NEXT:    lis 5, 21845
19364; PWR6-NEXT:    lis 6, 13107
19365; PWR6-NEXT:    ori 5, 5, 21845
19366; PWR6-NEXT:    rotldi 8, 4, 63
19367; PWR6-NEXT:    rotldi 9, 3, 63
19368; PWR6-NEXT:    rldimi 5, 5, 32, 0
19369; PWR6-NEXT:    and 8, 8, 5
19370; PWR6-NEXT:    and 5, 9, 5
19371; PWR6-NEXT:    ori 6, 6, 13107
19372; PWR6-NEXT:    sub 3, 3, 5
19373; PWR6-NEXT:    rldimi 6, 6, 32, 0
19374; PWR6-NEXT:    sub 4, 4, 8
19375; PWR6-NEXT:    and 8, 3, 6
19376; PWR6-NEXT:    rotldi 3, 3, 62
19377; PWR6-NEXT:    and 3, 3, 6
19378; PWR6-NEXT:    lis 7, 3855
19379; PWR6-NEXT:    and 5, 4, 6
19380; PWR6-NEXT:    rotldi 4, 4, 62
19381; PWR6-NEXT:    add 3, 8, 3
19382; PWR6-NEXT:    lis 9, 257
19383; PWR6-NEXT:    ori 7, 7, 3855
19384; PWR6-NEXT:    and 4, 4, 6
19385; PWR6-NEXT:    rldicl 6, 3, 60, 4
19386; PWR6-NEXT:    ori 9, 9, 257
19387; PWR6-NEXT:    rldimi 7, 7, 32, 0
19388; PWR6-NEXT:    add 4, 5, 4
19389; PWR6-NEXT:    add 3, 3, 6
19390; PWR6-NEXT:    rldimi 9, 9, 32, 0
19391; PWR6-NEXT:    rldicl 5, 4, 60, 4
19392; PWR6-NEXT:    and 3, 3, 7
19393; PWR6-NEXT:    add 4, 4, 5
19394; PWR6-NEXT:    mulld 3, 3, 9
19395; PWR6-NEXT:    and 4, 4, 7
19396; PWR6-NEXT:    rldicl 3, 3, 8, 56
19397; PWR6-NEXT:    mulld 4, 4, 9
19398; PWR6-NEXT:    li 5, 29
19399; PWR6-NEXT:    subfic 3, 3, 29
19400; PWR6-NEXT:    rldicl 4, 4, 8, 56
19401; PWR6-NEXT:    subfe 3, 5, 5
19402; PWR6-NEXT:    subfic 4, 4, 29
19403; PWR6-NEXT:    subfe 4, 5, 5
19404; PWR6-NEXT:    blr
19405;
19406; PWR7-LABEL: ugt_29_v2i64:
19407; PWR7:       # %bb.0:
19408; PWR7-NEXT:    addi 3, 1, -32
19409; PWR7-NEXT:    li 5, 0
19410; PWR7-NEXT:    li 6, -1
19411; PWR7-NEXT:    stxvd2x 34, 0, 3
19412; PWR7-NEXT:    ld 3, -24(1)
19413; PWR7-NEXT:    ld 4, -32(1)
19414; PWR7-NEXT:    popcntd 3, 3
19415; PWR7-NEXT:    popcntd 4, 4
19416; PWR7-NEXT:    cmpldi 3, 29
19417; PWR7-NEXT:    iselgt 3, 6, 5
19418; PWR7-NEXT:    cmpldi 4, 29
19419; PWR7-NEXT:    iselgt 4, 6, 5
19420; PWR7-NEXT:    std 3, -8(1)
19421; PWR7-NEXT:    addi 3, 1, -16
19422; PWR7-NEXT:    std 4, -16(1)
19423; PWR7-NEXT:    lxvd2x 34, 0, 3
19424; PWR7-NEXT:    blr
19425;
19426; PWR8-LABEL: ugt_29_v2i64:
19427; PWR8:       # %bb.0:
19428; PWR8-NEXT:    addis 3, 2, .LCPI156_0@toc@ha
19429; PWR8-NEXT:    vpopcntd 2, 2
19430; PWR8-NEXT:    addi 3, 3, .LCPI156_0@toc@l
19431; PWR8-NEXT:    lxvd2x 35, 0, 3
19432; PWR8-NEXT:    vcmpgtud 2, 2, 3
19433; PWR8-NEXT:    blr
19434;
19435; PWR9-LABEL: ugt_29_v2i64:
19436; PWR9:       # %bb.0:
19437; PWR9-NEXT:    addis 3, 2, .LCPI156_0@toc@ha
19438; PWR9-NEXT:    vpopcntd 2, 2
19439; PWR9-NEXT:    addi 3, 3, .LCPI156_0@toc@l
19440; PWR9-NEXT:    lxvx 35, 0, 3
19441; PWR9-NEXT:    vcmpgtud 2, 2, 3
19442; PWR9-NEXT:    blr
19443  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19444  %3 = icmp ugt <2 x i64> %2, <i64 29, i64 29>
19445  %4 = sext <2 x i1> %3 to <2 x i64>
19446  ret <2 x i64> %4
19447}
19448
19449define <2 x i64> @ult_30_v2i64(<2 x i64> %0) {
19450; PWR5-LABEL: ult_30_v2i64:
19451; PWR5:       # %bb.0:
19452; PWR5-NEXT:    lis 5, 21845
19453; PWR5-NEXT:    lis 6, 13107
19454; PWR5-NEXT:    ori 5, 5, 21845
19455; PWR5-NEXT:    rotldi 8, 4, 63
19456; PWR5-NEXT:    rotldi 9, 3, 63
19457; PWR5-NEXT:    rldimi 5, 5, 32, 0
19458; PWR5-NEXT:    and 8, 8, 5
19459; PWR5-NEXT:    and 5, 9, 5
19460; PWR5-NEXT:    ori 6, 6, 13107
19461; PWR5-NEXT:    sub 3, 3, 5
19462; PWR5-NEXT:    rldimi 6, 6, 32, 0
19463; PWR5-NEXT:    sub 4, 4, 8
19464; PWR5-NEXT:    and 8, 3, 6
19465; PWR5-NEXT:    rotldi 3, 3, 62
19466; PWR5-NEXT:    and 3, 3, 6
19467; PWR5-NEXT:    lis 7, 3855
19468; PWR5-NEXT:    and 5, 4, 6
19469; PWR5-NEXT:    rotldi 4, 4, 62
19470; PWR5-NEXT:    add 3, 8, 3
19471; PWR5-NEXT:    lis 9, 257
19472; PWR5-NEXT:    ori 7, 7, 3855
19473; PWR5-NEXT:    and 4, 4, 6
19474; PWR5-NEXT:    rldicl 6, 3, 60, 4
19475; PWR5-NEXT:    ori 9, 9, 257
19476; PWR5-NEXT:    rldimi 7, 7, 32, 0
19477; PWR5-NEXT:    add 4, 5, 4
19478; PWR5-NEXT:    add 3, 3, 6
19479; PWR5-NEXT:    rldimi 9, 9, 32, 0
19480; PWR5-NEXT:    rldicl 5, 4, 60, 4
19481; PWR5-NEXT:    and 3, 3, 7
19482; PWR5-NEXT:    add 4, 4, 5
19483; PWR5-NEXT:    mulld 3, 3, 9
19484; PWR5-NEXT:    and 4, 4, 7
19485; PWR5-NEXT:    rldicl 3, 3, 8, 56
19486; PWR5-NEXT:    li 5, 30
19487; PWR5-NEXT:    mulld 4, 4, 9
19488; PWR5-NEXT:    subc 6, 3, 5
19489; PWR5-NEXT:    rldicl 4, 4, 8, 56
19490; PWR5-NEXT:    subfe 3, 3, 3
19491; PWR5-NEXT:    subc 5, 4, 5
19492; PWR5-NEXT:    subfe 4, 4, 4
19493; PWR5-NEXT:    blr
19494;
19495; PWR6-LABEL: ult_30_v2i64:
19496; PWR6:       # %bb.0:
19497; PWR6-NEXT:    lis 5, 21845
19498; PWR6-NEXT:    lis 6, 13107
19499; PWR6-NEXT:    ori 5, 5, 21845
19500; PWR6-NEXT:    rotldi 8, 4, 63
19501; PWR6-NEXT:    rotldi 9, 3, 63
19502; PWR6-NEXT:    rldimi 5, 5, 32, 0
19503; PWR6-NEXT:    and 8, 8, 5
19504; PWR6-NEXT:    and 5, 9, 5
19505; PWR6-NEXT:    ori 6, 6, 13107
19506; PWR6-NEXT:    sub 3, 3, 5
19507; PWR6-NEXT:    rldimi 6, 6, 32, 0
19508; PWR6-NEXT:    sub 4, 4, 8
19509; PWR6-NEXT:    and 8, 3, 6
19510; PWR6-NEXT:    rotldi 3, 3, 62
19511; PWR6-NEXT:    and 3, 3, 6
19512; PWR6-NEXT:    lis 7, 3855
19513; PWR6-NEXT:    and 5, 4, 6
19514; PWR6-NEXT:    rotldi 4, 4, 62
19515; PWR6-NEXT:    add 3, 8, 3
19516; PWR6-NEXT:    lis 9, 257
19517; PWR6-NEXT:    ori 7, 7, 3855
19518; PWR6-NEXT:    and 4, 4, 6
19519; PWR6-NEXT:    rldicl 6, 3, 60, 4
19520; PWR6-NEXT:    ori 9, 9, 257
19521; PWR6-NEXT:    rldimi 7, 7, 32, 0
19522; PWR6-NEXT:    add 4, 5, 4
19523; PWR6-NEXT:    add 3, 3, 6
19524; PWR6-NEXT:    rldimi 9, 9, 32, 0
19525; PWR6-NEXT:    rldicl 5, 4, 60, 4
19526; PWR6-NEXT:    and 3, 3, 7
19527; PWR6-NEXT:    add 4, 4, 5
19528; PWR6-NEXT:    mulld 3, 3, 9
19529; PWR6-NEXT:    and 4, 4, 7
19530; PWR6-NEXT:    rldicl 3, 3, 8, 56
19531; PWR6-NEXT:    li 5, 30
19532; PWR6-NEXT:    mulld 4, 4, 9
19533; PWR6-NEXT:    subc 6, 3, 5
19534; PWR6-NEXT:    rldicl 4, 4, 8, 56
19535; PWR6-NEXT:    subfe 3, 3, 3
19536; PWR6-NEXT:    subc 5, 4, 5
19537; PWR6-NEXT:    subfe 4, 4, 4
19538; PWR6-NEXT:    blr
19539;
19540; PWR7-LABEL: ult_30_v2i64:
19541; PWR7:       # %bb.0:
19542; PWR7-NEXT:    addi 3, 1, -32
19543; PWR7-NEXT:    li 5, 0
19544; PWR7-NEXT:    li 6, -1
19545; PWR7-NEXT:    stxvd2x 34, 0, 3
19546; PWR7-NEXT:    ld 3, -24(1)
19547; PWR7-NEXT:    ld 4, -32(1)
19548; PWR7-NEXT:    popcntd 3, 3
19549; PWR7-NEXT:    popcntd 4, 4
19550; PWR7-NEXT:    cmpldi 3, 30
19551; PWR7-NEXT:    isellt 3, 6, 5
19552; PWR7-NEXT:    cmpldi 4, 30
19553; PWR7-NEXT:    isellt 4, 6, 5
19554; PWR7-NEXT:    std 3, -8(1)
19555; PWR7-NEXT:    addi 3, 1, -16
19556; PWR7-NEXT:    std 4, -16(1)
19557; PWR7-NEXT:    lxvd2x 34, 0, 3
19558; PWR7-NEXT:    blr
19559;
19560; PWR8-LABEL: ult_30_v2i64:
19561; PWR8:       # %bb.0:
19562; PWR8-NEXT:    addis 3, 2, .LCPI157_0@toc@ha
19563; PWR8-NEXT:    vpopcntd 2, 2
19564; PWR8-NEXT:    addi 3, 3, .LCPI157_0@toc@l
19565; PWR8-NEXT:    lxvd2x 35, 0, 3
19566; PWR8-NEXT:    vcmpgtud 2, 3, 2
19567; PWR8-NEXT:    blr
19568;
19569; PWR9-LABEL: ult_30_v2i64:
19570; PWR9:       # %bb.0:
19571; PWR9-NEXT:    addis 3, 2, .LCPI157_0@toc@ha
19572; PWR9-NEXT:    vpopcntd 2, 2
19573; PWR9-NEXT:    addi 3, 3, .LCPI157_0@toc@l
19574; PWR9-NEXT:    lxvx 35, 0, 3
19575; PWR9-NEXT:    vcmpgtud 2, 3, 2
19576; PWR9-NEXT:    blr
19577  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19578  %3 = icmp ult <2 x i64> %2, <i64 30, i64 30>
19579  %4 = sext <2 x i1> %3 to <2 x i64>
19580  ret <2 x i64> %4
19581}
19582
19583define <2 x i64> @ugt_30_v2i64(<2 x i64> %0) {
19584; PWR5-LABEL: ugt_30_v2i64:
19585; PWR5:       # %bb.0:
19586; PWR5-NEXT:    lis 5, 21845
19587; PWR5-NEXT:    lis 6, 13107
19588; PWR5-NEXT:    ori 5, 5, 21845
19589; PWR5-NEXT:    rotldi 8, 4, 63
19590; PWR5-NEXT:    rotldi 9, 3, 63
19591; PWR5-NEXT:    rldimi 5, 5, 32, 0
19592; PWR5-NEXT:    and 8, 8, 5
19593; PWR5-NEXT:    and 5, 9, 5
19594; PWR5-NEXT:    ori 6, 6, 13107
19595; PWR5-NEXT:    sub 3, 3, 5
19596; PWR5-NEXT:    rldimi 6, 6, 32, 0
19597; PWR5-NEXT:    sub 4, 4, 8
19598; PWR5-NEXT:    and 8, 3, 6
19599; PWR5-NEXT:    rotldi 3, 3, 62
19600; PWR5-NEXT:    and 3, 3, 6
19601; PWR5-NEXT:    lis 7, 3855
19602; PWR5-NEXT:    and 5, 4, 6
19603; PWR5-NEXT:    rotldi 4, 4, 62
19604; PWR5-NEXT:    add 3, 8, 3
19605; PWR5-NEXT:    lis 9, 257
19606; PWR5-NEXT:    ori 7, 7, 3855
19607; PWR5-NEXT:    and 4, 4, 6
19608; PWR5-NEXT:    rldicl 6, 3, 60, 4
19609; PWR5-NEXT:    ori 9, 9, 257
19610; PWR5-NEXT:    rldimi 7, 7, 32, 0
19611; PWR5-NEXT:    add 4, 5, 4
19612; PWR5-NEXT:    add 3, 3, 6
19613; PWR5-NEXT:    rldimi 9, 9, 32, 0
19614; PWR5-NEXT:    rldicl 5, 4, 60, 4
19615; PWR5-NEXT:    and 3, 3, 7
19616; PWR5-NEXT:    add 4, 4, 5
19617; PWR5-NEXT:    mulld 3, 3, 9
19618; PWR5-NEXT:    and 4, 4, 7
19619; PWR5-NEXT:    rldicl 3, 3, 8, 56
19620; PWR5-NEXT:    mulld 4, 4, 9
19621; PWR5-NEXT:    li 5, 30
19622; PWR5-NEXT:    subfic 3, 3, 30
19623; PWR5-NEXT:    rldicl 4, 4, 8, 56
19624; PWR5-NEXT:    subfe 3, 5, 5
19625; PWR5-NEXT:    subfic 4, 4, 30
19626; PWR5-NEXT:    subfe 4, 5, 5
19627; PWR5-NEXT:    blr
19628;
19629; PWR6-LABEL: ugt_30_v2i64:
19630; PWR6:       # %bb.0:
19631; PWR6-NEXT:    lis 5, 21845
19632; PWR6-NEXT:    lis 6, 13107
19633; PWR6-NEXT:    ori 5, 5, 21845
19634; PWR6-NEXT:    rotldi 8, 4, 63
19635; PWR6-NEXT:    rotldi 9, 3, 63
19636; PWR6-NEXT:    rldimi 5, 5, 32, 0
19637; PWR6-NEXT:    and 8, 8, 5
19638; PWR6-NEXT:    and 5, 9, 5
19639; PWR6-NEXT:    ori 6, 6, 13107
19640; PWR6-NEXT:    sub 3, 3, 5
19641; PWR6-NEXT:    rldimi 6, 6, 32, 0
19642; PWR6-NEXT:    sub 4, 4, 8
19643; PWR6-NEXT:    and 8, 3, 6
19644; PWR6-NEXT:    rotldi 3, 3, 62
19645; PWR6-NEXT:    and 3, 3, 6
19646; PWR6-NEXT:    lis 7, 3855
19647; PWR6-NEXT:    and 5, 4, 6
19648; PWR6-NEXT:    rotldi 4, 4, 62
19649; PWR6-NEXT:    add 3, 8, 3
19650; PWR6-NEXT:    lis 9, 257
19651; PWR6-NEXT:    ori 7, 7, 3855
19652; PWR6-NEXT:    and 4, 4, 6
19653; PWR6-NEXT:    rldicl 6, 3, 60, 4
19654; PWR6-NEXT:    ori 9, 9, 257
19655; PWR6-NEXT:    rldimi 7, 7, 32, 0
19656; PWR6-NEXT:    add 4, 5, 4
19657; PWR6-NEXT:    add 3, 3, 6
19658; PWR6-NEXT:    rldimi 9, 9, 32, 0
19659; PWR6-NEXT:    rldicl 5, 4, 60, 4
19660; PWR6-NEXT:    and 3, 3, 7
19661; PWR6-NEXT:    add 4, 4, 5
19662; PWR6-NEXT:    mulld 3, 3, 9
19663; PWR6-NEXT:    and 4, 4, 7
19664; PWR6-NEXT:    rldicl 3, 3, 8, 56
19665; PWR6-NEXT:    mulld 4, 4, 9
19666; PWR6-NEXT:    li 5, 30
19667; PWR6-NEXT:    subfic 3, 3, 30
19668; PWR6-NEXT:    rldicl 4, 4, 8, 56
19669; PWR6-NEXT:    subfe 3, 5, 5
19670; PWR6-NEXT:    subfic 4, 4, 30
19671; PWR6-NEXT:    subfe 4, 5, 5
19672; PWR6-NEXT:    blr
19673;
19674; PWR7-LABEL: ugt_30_v2i64:
19675; PWR7:       # %bb.0:
19676; PWR7-NEXT:    addi 3, 1, -32
19677; PWR7-NEXT:    li 5, 0
19678; PWR7-NEXT:    li 6, -1
19679; PWR7-NEXT:    stxvd2x 34, 0, 3
19680; PWR7-NEXT:    ld 3, -24(1)
19681; PWR7-NEXT:    ld 4, -32(1)
19682; PWR7-NEXT:    popcntd 3, 3
19683; PWR7-NEXT:    popcntd 4, 4
19684; PWR7-NEXT:    cmpldi 3, 30
19685; PWR7-NEXT:    iselgt 3, 6, 5
19686; PWR7-NEXT:    cmpldi 4, 30
19687; PWR7-NEXT:    iselgt 4, 6, 5
19688; PWR7-NEXT:    std 3, -8(1)
19689; PWR7-NEXT:    addi 3, 1, -16
19690; PWR7-NEXT:    std 4, -16(1)
19691; PWR7-NEXT:    lxvd2x 34, 0, 3
19692; PWR7-NEXT:    blr
19693;
19694; PWR8-LABEL: ugt_30_v2i64:
19695; PWR8:       # %bb.0:
19696; PWR8-NEXT:    addis 3, 2, .LCPI158_0@toc@ha
19697; PWR8-NEXT:    vpopcntd 2, 2
19698; PWR8-NEXT:    addi 3, 3, .LCPI158_0@toc@l
19699; PWR8-NEXT:    lxvd2x 35, 0, 3
19700; PWR8-NEXT:    vcmpgtud 2, 2, 3
19701; PWR8-NEXT:    blr
19702;
19703; PWR9-LABEL: ugt_30_v2i64:
19704; PWR9:       # %bb.0:
19705; PWR9-NEXT:    addis 3, 2, .LCPI158_0@toc@ha
19706; PWR9-NEXT:    vpopcntd 2, 2
19707; PWR9-NEXT:    addi 3, 3, .LCPI158_0@toc@l
19708; PWR9-NEXT:    lxvx 35, 0, 3
19709; PWR9-NEXT:    vcmpgtud 2, 2, 3
19710; PWR9-NEXT:    blr
19711  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19712  %3 = icmp ugt <2 x i64> %2, <i64 30, i64 30>
19713  %4 = sext <2 x i1> %3 to <2 x i64>
19714  ret <2 x i64> %4
19715}
19716
19717define <2 x i64> @ult_31_v2i64(<2 x i64> %0) {
19718; PWR5-LABEL: ult_31_v2i64:
19719; PWR5:       # %bb.0:
19720; PWR5-NEXT:    lis 5, 21845
19721; PWR5-NEXT:    lis 6, 13107
19722; PWR5-NEXT:    ori 5, 5, 21845
19723; PWR5-NEXT:    rotldi 8, 4, 63
19724; PWR5-NEXT:    rotldi 9, 3, 63
19725; PWR5-NEXT:    rldimi 5, 5, 32, 0
19726; PWR5-NEXT:    and 8, 8, 5
19727; PWR5-NEXT:    and 5, 9, 5
19728; PWR5-NEXT:    ori 6, 6, 13107
19729; PWR5-NEXT:    sub 3, 3, 5
19730; PWR5-NEXT:    rldimi 6, 6, 32, 0
19731; PWR5-NEXT:    sub 4, 4, 8
19732; PWR5-NEXT:    and 8, 3, 6
19733; PWR5-NEXT:    rotldi 3, 3, 62
19734; PWR5-NEXT:    and 3, 3, 6
19735; PWR5-NEXT:    lis 7, 3855
19736; PWR5-NEXT:    and 5, 4, 6
19737; PWR5-NEXT:    rotldi 4, 4, 62
19738; PWR5-NEXT:    add 3, 8, 3
19739; PWR5-NEXT:    lis 9, 257
19740; PWR5-NEXT:    ori 7, 7, 3855
19741; PWR5-NEXT:    and 4, 4, 6
19742; PWR5-NEXT:    rldicl 6, 3, 60, 4
19743; PWR5-NEXT:    ori 9, 9, 257
19744; PWR5-NEXT:    rldimi 7, 7, 32, 0
19745; PWR5-NEXT:    add 4, 5, 4
19746; PWR5-NEXT:    add 3, 3, 6
19747; PWR5-NEXT:    rldimi 9, 9, 32, 0
19748; PWR5-NEXT:    rldicl 5, 4, 60, 4
19749; PWR5-NEXT:    and 3, 3, 7
19750; PWR5-NEXT:    add 4, 4, 5
19751; PWR5-NEXT:    mulld 3, 3, 9
19752; PWR5-NEXT:    and 4, 4, 7
19753; PWR5-NEXT:    rldicl 3, 3, 8, 56
19754; PWR5-NEXT:    li 5, 31
19755; PWR5-NEXT:    mulld 4, 4, 9
19756; PWR5-NEXT:    subc 6, 3, 5
19757; PWR5-NEXT:    rldicl 4, 4, 8, 56
19758; PWR5-NEXT:    subfe 3, 3, 3
19759; PWR5-NEXT:    subc 5, 4, 5
19760; PWR5-NEXT:    subfe 4, 4, 4
19761; PWR5-NEXT:    blr
19762;
19763; PWR6-LABEL: ult_31_v2i64:
19764; PWR6:       # %bb.0:
19765; PWR6-NEXT:    lis 5, 21845
19766; PWR6-NEXT:    lis 6, 13107
19767; PWR6-NEXT:    ori 5, 5, 21845
19768; PWR6-NEXT:    rotldi 8, 4, 63
19769; PWR6-NEXT:    rotldi 9, 3, 63
19770; PWR6-NEXT:    rldimi 5, 5, 32, 0
19771; PWR6-NEXT:    and 8, 8, 5
19772; PWR6-NEXT:    and 5, 9, 5
19773; PWR6-NEXT:    ori 6, 6, 13107
19774; PWR6-NEXT:    sub 3, 3, 5
19775; PWR6-NEXT:    rldimi 6, 6, 32, 0
19776; PWR6-NEXT:    sub 4, 4, 8
19777; PWR6-NEXT:    and 8, 3, 6
19778; PWR6-NEXT:    rotldi 3, 3, 62
19779; PWR6-NEXT:    and 3, 3, 6
19780; PWR6-NEXT:    lis 7, 3855
19781; PWR6-NEXT:    and 5, 4, 6
19782; PWR6-NEXT:    rotldi 4, 4, 62
19783; PWR6-NEXT:    add 3, 8, 3
19784; PWR6-NEXT:    lis 9, 257
19785; PWR6-NEXT:    ori 7, 7, 3855
19786; PWR6-NEXT:    and 4, 4, 6
19787; PWR6-NEXT:    rldicl 6, 3, 60, 4
19788; PWR6-NEXT:    ori 9, 9, 257
19789; PWR6-NEXT:    rldimi 7, 7, 32, 0
19790; PWR6-NEXT:    add 4, 5, 4
19791; PWR6-NEXT:    add 3, 3, 6
19792; PWR6-NEXT:    rldimi 9, 9, 32, 0
19793; PWR6-NEXT:    rldicl 5, 4, 60, 4
19794; PWR6-NEXT:    and 3, 3, 7
19795; PWR6-NEXT:    add 4, 4, 5
19796; PWR6-NEXT:    mulld 3, 3, 9
19797; PWR6-NEXT:    and 4, 4, 7
19798; PWR6-NEXT:    rldicl 3, 3, 8, 56
19799; PWR6-NEXT:    li 5, 31
19800; PWR6-NEXT:    mulld 4, 4, 9
19801; PWR6-NEXT:    subc 6, 3, 5
19802; PWR6-NEXT:    rldicl 4, 4, 8, 56
19803; PWR6-NEXT:    subfe 3, 3, 3
19804; PWR6-NEXT:    subc 5, 4, 5
19805; PWR6-NEXT:    subfe 4, 4, 4
19806; PWR6-NEXT:    blr
19807;
19808; PWR7-LABEL: ult_31_v2i64:
19809; PWR7:       # %bb.0:
19810; PWR7-NEXT:    addi 3, 1, -32
19811; PWR7-NEXT:    li 5, 0
19812; PWR7-NEXT:    li 6, -1
19813; PWR7-NEXT:    stxvd2x 34, 0, 3
19814; PWR7-NEXT:    ld 3, -24(1)
19815; PWR7-NEXT:    ld 4, -32(1)
19816; PWR7-NEXT:    popcntd 3, 3
19817; PWR7-NEXT:    popcntd 4, 4
19818; PWR7-NEXT:    cmpldi 3, 31
19819; PWR7-NEXT:    isellt 3, 6, 5
19820; PWR7-NEXT:    cmpldi 4, 31
19821; PWR7-NEXT:    isellt 4, 6, 5
19822; PWR7-NEXT:    std 3, -8(1)
19823; PWR7-NEXT:    addi 3, 1, -16
19824; PWR7-NEXT:    std 4, -16(1)
19825; PWR7-NEXT:    lxvd2x 34, 0, 3
19826; PWR7-NEXT:    blr
19827;
19828; PWR8-LABEL: ult_31_v2i64:
19829; PWR8:       # %bb.0:
19830; PWR8-NEXT:    addis 3, 2, .LCPI159_0@toc@ha
19831; PWR8-NEXT:    vpopcntd 2, 2
19832; PWR8-NEXT:    addi 3, 3, .LCPI159_0@toc@l
19833; PWR8-NEXT:    lxvd2x 35, 0, 3
19834; PWR8-NEXT:    vcmpgtud 2, 3, 2
19835; PWR8-NEXT:    blr
19836;
19837; PWR9-LABEL: ult_31_v2i64:
19838; PWR9:       # %bb.0:
19839; PWR9-NEXT:    addis 3, 2, .LCPI159_0@toc@ha
19840; PWR9-NEXT:    vpopcntd 2, 2
19841; PWR9-NEXT:    addi 3, 3, .LCPI159_0@toc@l
19842; PWR9-NEXT:    lxvx 35, 0, 3
19843; PWR9-NEXT:    vcmpgtud 2, 3, 2
19844; PWR9-NEXT:    blr
19845  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19846  %3 = icmp ult <2 x i64> %2, <i64 31, i64 31>
19847  %4 = sext <2 x i1> %3 to <2 x i64>
19848  ret <2 x i64> %4
19849}
19850
19851define <2 x i64> @ugt_31_v2i64(<2 x i64> %0) {
19852; PWR5-LABEL: ugt_31_v2i64:
19853; PWR5:       # %bb.0:
19854; PWR5-NEXT:    lis 5, 21845
19855; PWR5-NEXT:    lis 6, 13107
19856; PWR5-NEXT:    ori 5, 5, 21845
19857; PWR5-NEXT:    rotldi 8, 4, 63
19858; PWR5-NEXT:    rotldi 9, 3, 63
19859; PWR5-NEXT:    rldimi 5, 5, 32, 0
19860; PWR5-NEXT:    and 8, 8, 5
19861; PWR5-NEXT:    and 5, 9, 5
19862; PWR5-NEXT:    ori 6, 6, 13107
19863; PWR5-NEXT:    sub 3, 3, 5
19864; PWR5-NEXT:    rldimi 6, 6, 32, 0
19865; PWR5-NEXT:    sub 4, 4, 8
19866; PWR5-NEXT:    and 8, 3, 6
19867; PWR5-NEXT:    rotldi 3, 3, 62
19868; PWR5-NEXT:    and 3, 3, 6
19869; PWR5-NEXT:    lis 7, 3855
19870; PWR5-NEXT:    and 5, 4, 6
19871; PWR5-NEXT:    rotldi 4, 4, 62
19872; PWR5-NEXT:    add 3, 8, 3
19873; PWR5-NEXT:    lis 9, 257
19874; PWR5-NEXT:    ori 7, 7, 3855
19875; PWR5-NEXT:    and 4, 4, 6
19876; PWR5-NEXT:    rldicl 6, 3, 60, 4
19877; PWR5-NEXT:    ori 9, 9, 257
19878; PWR5-NEXT:    rldimi 7, 7, 32, 0
19879; PWR5-NEXT:    add 4, 5, 4
19880; PWR5-NEXT:    add 3, 3, 6
19881; PWR5-NEXT:    rldimi 9, 9, 32, 0
19882; PWR5-NEXT:    rldicl 5, 4, 60, 4
19883; PWR5-NEXT:    and 3, 3, 7
19884; PWR5-NEXT:    add 4, 4, 5
19885; PWR5-NEXT:    mulld 3, 3, 9
19886; PWR5-NEXT:    and 4, 4, 7
19887; PWR5-NEXT:    rldicl 3, 3, 8, 56
19888; PWR5-NEXT:    mulld 4, 4, 9
19889; PWR5-NEXT:    li 5, 31
19890; PWR5-NEXT:    subfic 3, 3, 31
19891; PWR5-NEXT:    rldicl 4, 4, 8, 56
19892; PWR5-NEXT:    subfe 3, 5, 5
19893; PWR5-NEXT:    subfic 4, 4, 31
19894; PWR5-NEXT:    subfe 4, 5, 5
19895; PWR5-NEXT:    blr
19896;
19897; PWR6-LABEL: ugt_31_v2i64:
19898; PWR6:       # %bb.0:
19899; PWR6-NEXT:    lis 5, 21845
19900; PWR6-NEXT:    lis 6, 13107
19901; PWR6-NEXT:    ori 5, 5, 21845
19902; PWR6-NEXT:    rotldi 8, 4, 63
19903; PWR6-NEXT:    rotldi 9, 3, 63
19904; PWR6-NEXT:    rldimi 5, 5, 32, 0
19905; PWR6-NEXT:    and 8, 8, 5
19906; PWR6-NEXT:    and 5, 9, 5
19907; PWR6-NEXT:    ori 6, 6, 13107
19908; PWR6-NEXT:    sub 3, 3, 5
19909; PWR6-NEXT:    rldimi 6, 6, 32, 0
19910; PWR6-NEXT:    sub 4, 4, 8
19911; PWR6-NEXT:    and 8, 3, 6
19912; PWR6-NEXT:    rotldi 3, 3, 62
19913; PWR6-NEXT:    and 3, 3, 6
19914; PWR6-NEXT:    lis 7, 3855
19915; PWR6-NEXT:    and 5, 4, 6
19916; PWR6-NEXT:    rotldi 4, 4, 62
19917; PWR6-NEXT:    add 3, 8, 3
19918; PWR6-NEXT:    lis 9, 257
19919; PWR6-NEXT:    ori 7, 7, 3855
19920; PWR6-NEXT:    and 4, 4, 6
19921; PWR6-NEXT:    rldicl 6, 3, 60, 4
19922; PWR6-NEXT:    ori 9, 9, 257
19923; PWR6-NEXT:    rldimi 7, 7, 32, 0
19924; PWR6-NEXT:    add 4, 5, 4
19925; PWR6-NEXT:    add 3, 3, 6
19926; PWR6-NEXT:    rldimi 9, 9, 32, 0
19927; PWR6-NEXT:    rldicl 5, 4, 60, 4
19928; PWR6-NEXT:    and 3, 3, 7
19929; PWR6-NEXT:    add 4, 4, 5
19930; PWR6-NEXT:    mulld 3, 3, 9
19931; PWR6-NEXT:    and 4, 4, 7
19932; PWR6-NEXT:    rldicl 3, 3, 8, 56
19933; PWR6-NEXT:    mulld 4, 4, 9
19934; PWR6-NEXT:    li 5, 31
19935; PWR6-NEXT:    subfic 3, 3, 31
19936; PWR6-NEXT:    rldicl 4, 4, 8, 56
19937; PWR6-NEXT:    subfe 3, 5, 5
19938; PWR6-NEXT:    subfic 4, 4, 31
19939; PWR6-NEXT:    subfe 4, 5, 5
19940; PWR6-NEXT:    blr
19941;
19942; PWR7-LABEL: ugt_31_v2i64:
19943; PWR7:       # %bb.0:
19944; PWR7-NEXT:    addi 3, 1, -32
19945; PWR7-NEXT:    li 5, 0
19946; PWR7-NEXT:    li 6, -1
19947; PWR7-NEXT:    stxvd2x 34, 0, 3
19948; PWR7-NEXT:    ld 3, -24(1)
19949; PWR7-NEXT:    ld 4, -32(1)
19950; PWR7-NEXT:    popcntd 3, 3
19951; PWR7-NEXT:    popcntd 4, 4
19952; PWR7-NEXT:    cmpldi 3, 31
19953; PWR7-NEXT:    iselgt 3, 6, 5
19954; PWR7-NEXT:    cmpldi 4, 31
19955; PWR7-NEXT:    iselgt 4, 6, 5
19956; PWR7-NEXT:    std 3, -8(1)
19957; PWR7-NEXT:    addi 3, 1, -16
19958; PWR7-NEXT:    std 4, -16(1)
19959; PWR7-NEXT:    lxvd2x 34, 0, 3
19960; PWR7-NEXT:    blr
19961;
19962; PWR8-LABEL: ugt_31_v2i64:
19963; PWR8:       # %bb.0:
19964; PWR8-NEXT:    addis 3, 2, .LCPI160_0@toc@ha
19965; PWR8-NEXT:    vpopcntd 2, 2
19966; PWR8-NEXT:    addi 3, 3, .LCPI160_0@toc@l
19967; PWR8-NEXT:    lxvd2x 35, 0, 3
19968; PWR8-NEXT:    vcmpgtud 2, 2, 3
19969; PWR8-NEXT:    blr
19970;
19971; PWR9-LABEL: ugt_31_v2i64:
19972; PWR9:       # %bb.0:
19973; PWR9-NEXT:    addis 3, 2, .LCPI160_0@toc@ha
19974; PWR9-NEXT:    vpopcntd 2, 2
19975; PWR9-NEXT:    addi 3, 3, .LCPI160_0@toc@l
19976; PWR9-NEXT:    lxvx 35, 0, 3
19977; PWR9-NEXT:    vcmpgtud 2, 2, 3
19978; PWR9-NEXT:    blr
19979  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
19980  %3 = icmp ugt <2 x i64> %2, <i64 31, i64 31>
19981  %4 = sext <2 x i1> %3 to <2 x i64>
19982  ret <2 x i64> %4
19983}
19984
19985define <2 x i64> @ult_32_v2i64(<2 x i64> %0) {
19986; PWR5-LABEL: ult_32_v2i64:
19987; PWR5:       # %bb.0:
19988; PWR5-NEXT:    lis 5, 21845
19989; PWR5-NEXT:    lis 6, 13107
19990; PWR5-NEXT:    ori 5, 5, 21845
19991; PWR5-NEXT:    rotldi 8, 4, 63
19992; PWR5-NEXT:    rotldi 9, 3, 63
19993; PWR5-NEXT:    rldimi 5, 5, 32, 0
19994; PWR5-NEXT:    and 8, 8, 5
19995; PWR5-NEXT:    and 5, 9, 5
19996; PWR5-NEXT:    ori 6, 6, 13107
19997; PWR5-NEXT:    sub 3, 3, 5
19998; PWR5-NEXT:    rldimi 6, 6, 32, 0
19999; PWR5-NEXT:    sub 4, 4, 8
20000; PWR5-NEXT:    and 8, 3, 6
20001; PWR5-NEXT:    rotldi 3, 3, 62
20002; PWR5-NEXT:    and 3, 3, 6
20003; PWR5-NEXT:    lis 7, 3855
20004; PWR5-NEXT:    and 5, 4, 6
20005; PWR5-NEXT:    rotldi 4, 4, 62
20006; PWR5-NEXT:    add 3, 8, 3
20007; PWR5-NEXT:    lis 9, 257
20008; PWR5-NEXT:    ori 7, 7, 3855
20009; PWR5-NEXT:    and 4, 4, 6
20010; PWR5-NEXT:    rldicl 6, 3, 60, 4
20011; PWR5-NEXT:    ori 9, 9, 257
20012; PWR5-NEXT:    rldimi 7, 7, 32, 0
20013; PWR5-NEXT:    add 4, 5, 4
20014; PWR5-NEXT:    add 3, 3, 6
20015; PWR5-NEXT:    rldimi 9, 9, 32, 0
20016; PWR5-NEXT:    rldicl 5, 4, 60, 4
20017; PWR5-NEXT:    and 3, 3, 7
20018; PWR5-NEXT:    add 4, 4, 5
20019; PWR5-NEXT:    mulld 3, 3, 9
20020; PWR5-NEXT:    and 4, 4, 7
20021; PWR5-NEXT:    rldicl 3, 3, 8, 56
20022; PWR5-NEXT:    li 5, 32
20023; PWR5-NEXT:    mulld 4, 4, 9
20024; PWR5-NEXT:    subc 6, 3, 5
20025; PWR5-NEXT:    rldicl 4, 4, 8, 56
20026; PWR5-NEXT:    subfe 3, 3, 3
20027; PWR5-NEXT:    subc 5, 4, 5
20028; PWR5-NEXT:    subfe 4, 4, 4
20029; PWR5-NEXT:    blr
20030;
20031; PWR6-LABEL: ult_32_v2i64:
20032; PWR6:       # %bb.0:
20033; PWR6-NEXT:    lis 5, 21845
20034; PWR6-NEXT:    lis 6, 13107
20035; PWR6-NEXT:    ori 5, 5, 21845
20036; PWR6-NEXT:    rotldi 8, 4, 63
20037; PWR6-NEXT:    rotldi 9, 3, 63
20038; PWR6-NEXT:    rldimi 5, 5, 32, 0
20039; PWR6-NEXT:    and 8, 8, 5
20040; PWR6-NEXT:    and 5, 9, 5
20041; PWR6-NEXT:    ori 6, 6, 13107
20042; PWR6-NEXT:    sub 3, 3, 5
20043; PWR6-NEXT:    rldimi 6, 6, 32, 0
20044; PWR6-NEXT:    sub 4, 4, 8
20045; PWR6-NEXT:    and 8, 3, 6
20046; PWR6-NEXT:    rotldi 3, 3, 62
20047; PWR6-NEXT:    and 3, 3, 6
20048; PWR6-NEXT:    lis 7, 3855
20049; PWR6-NEXT:    and 5, 4, 6
20050; PWR6-NEXT:    rotldi 4, 4, 62
20051; PWR6-NEXT:    add 3, 8, 3
20052; PWR6-NEXT:    lis 9, 257
20053; PWR6-NEXT:    ori 7, 7, 3855
20054; PWR6-NEXT:    and 4, 4, 6
20055; PWR6-NEXT:    rldicl 6, 3, 60, 4
20056; PWR6-NEXT:    ori 9, 9, 257
20057; PWR6-NEXT:    rldimi 7, 7, 32, 0
20058; PWR6-NEXT:    add 4, 5, 4
20059; PWR6-NEXT:    add 3, 3, 6
20060; PWR6-NEXT:    rldimi 9, 9, 32, 0
20061; PWR6-NEXT:    rldicl 5, 4, 60, 4
20062; PWR6-NEXT:    and 3, 3, 7
20063; PWR6-NEXT:    add 4, 4, 5
20064; PWR6-NEXT:    mulld 3, 3, 9
20065; PWR6-NEXT:    and 4, 4, 7
20066; PWR6-NEXT:    rldicl 3, 3, 8, 56
20067; PWR6-NEXT:    li 5, 32
20068; PWR6-NEXT:    mulld 4, 4, 9
20069; PWR6-NEXT:    subc 6, 3, 5
20070; PWR6-NEXT:    rldicl 4, 4, 8, 56
20071; PWR6-NEXT:    subfe 3, 3, 3
20072; PWR6-NEXT:    subc 5, 4, 5
20073; PWR6-NEXT:    subfe 4, 4, 4
20074; PWR6-NEXT:    blr
20075;
20076; PWR7-LABEL: ult_32_v2i64:
20077; PWR7:       # %bb.0:
20078; PWR7-NEXT:    addi 3, 1, -32
20079; PWR7-NEXT:    li 5, 0
20080; PWR7-NEXT:    li 6, -1
20081; PWR7-NEXT:    stxvd2x 34, 0, 3
20082; PWR7-NEXT:    ld 3, -24(1)
20083; PWR7-NEXT:    ld 4, -32(1)
20084; PWR7-NEXT:    popcntd 3, 3
20085; PWR7-NEXT:    popcntd 4, 4
20086; PWR7-NEXT:    cmpldi 3, 32
20087; PWR7-NEXT:    isellt 3, 6, 5
20088; PWR7-NEXT:    cmpldi 4, 32
20089; PWR7-NEXT:    isellt 4, 6, 5
20090; PWR7-NEXT:    std 3, -8(1)
20091; PWR7-NEXT:    addi 3, 1, -16
20092; PWR7-NEXT:    std 4, -16(1)
20093; PWR7-NEXT:    lxvd2x 34, 0, 3
20094; PWR7-NEXT:    blr
20095;
20096; PWR8-LABEL: ult_32_v2i64:
20097; PWR8:       # %bb.0:
20098; PWR8-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
20099; PWR8-NEXT:    vpopcntd 2, 2
20100; PWR8-NEXT:    addi 3, 3, .LCPI161_0@toc@l
20101; PWR8-NEXT:    lxvd2x 35, 0, 3
20102; PWR8-NEXT:    vcmpgtud 2, 3, 2
20103; PWR8-NEXT:    blr
20104;
20105; PWR9-LABEL: ult_32_v2i64:
20106; PWR9:       # %bb.0:
20107; PWR9-NEXT:    addis 3, 2, .LCPI161_0@toc@ha
20108; PWR9-NEXT:    vpopcntd 2, 2
20109; PWR9-NEXT:    addi 3, 3, .LCPI161_0@toc@l
20110; PWR9-NEXT:    lxvx 35, 0, 3
20111; PWR9-NEXT:    vcmpgtud 2, 3, 2
20112; PWR9-NEXT:    blr
20113  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20114  %3 = icmp ult <2 x i64> %2, <i64 32, i64 32>
20115  %4 = sext <2 x i1> %3 to <2 x i64>
20116  ret <2 x i64> %4
20117}
20118
20119define <2 x i64> @ugt_32_v2i64(<2 x i64> %0) {
20120; PWR5-LABEL: ugt_32_v2i64:
20121; PWR5:       # %bb.0:
20122; PWR5-NEXT:    lis 5, 21845
20123; PWR5-NEXT:    lis 6, 13107
20124; PWR5-NEXT:    ori 5, 5, 21845
20125; PWR5-NEXT:    rotldi 8, 4, 63
20126; PWR5-NEXT:    rotldi 9, 3, 63
20127; PWR5-NEXT:    rldimi 5, 5, 32, 0
20128; PWR5-NEXT:    and 8, 8, 5
20129; PWR5-NEXT:    and 5, 9, 5
20130; PWR5-NEXT:    ori 6, 6, 13107
20131; PWR5-NEXT:    sub 3, 3, 5
20132; PWR5-NEXT:    rldimi 6, 6, 32, 0
20133; PWR5-NEXT:    sub 4, 4, 8
20134; PWR5-NEXT:    and 8, 3, 6
20135; PWR5-NEXT:    rotldi 3, 3, 62
20136; PWR5-NEXT:    and 3, 3, 6
20137; PWR5-NEXT:    lis 7, 3855
20138; PWR5-NEXT:    and 5, 4, 6
20139; PWR5-NEXT:    rotldi 4, 4, 62
20140; PWR5-NEXT:    add 3, 8, 3
20141; PWR5-NEXT:    lis 9, 257
20142; PWR5-NEXT:    ori 7, 7, 3855
20143; PWR5-NEXT:    and 4, 4, 6
20144; PWR5-NEXT:    rldicl 6, 3, 60, 4
20145; PWR5-NEXT:    ori 9, 9, 257
20146; PWR5-NEXT:    rldimi 7, 7, 32, 0
20147; PWR5-NEXT:    add 4, 5, 4
20148; PWR5-NEXT:    add 3, 3, 6
20149; PWR5-NEXT:    rldimi 9, 9, 32, 0
20150; PWR5-NEXT:    rldicl 5, 4, 60, 4
20151; PWR5-NEXT:    and 3, 3, 7
20152; PWR5-NEXT:    add 4, 4, 5
20153; PWR5-NEXT:    mulld 3, 3, 9
20154; PWR5-NEXT:    and 4, 4, 7
20155; PWR5-NEXT:    rldicl 3, 3, 8, 56
20156; PWR5-NEXT:    mulld 4, 4, 9
20157; PWR5-NEXT:    li 5, 32
20158; PWR5-NEXT:    subfic 3, 3, 32
20159; PWR5-NEXT:    rldicl 4, 4, 8, 56
20160; PWR5-NEXT:    subfe 3, 5, 5
20161; PWR5-NEXT:    subfic 4, 4, 32
20162; PWR5-NEXT:    subfe 4, 5, 5
20163; PWR5-NEXT:    blr
20164;
20165; PWR6-LABEL: ugt_32_v2i64:
20166; PWR6:       # %bb.0:
20167; PWR6-NEXT:    lis 5, 21845
20168; PWR6-NEXT:    lis 6, 13107
20169; PWR6-NEXT:    ori 5, 5, 21845
20170; PWR6-NEXT:    rotldi 8, 4, 63
20171; PWR6-NEXT:    rotldi 9, 3, 63
20172; PWR6-NEXT:    rldimi 5, 5, 32, 0
20173; PWR6-NEXT:    and 8, 8, 5
20174; PWR6-NEXT:    and 5, 9, 5
20175; PWR6-NEXT:    ori 6, 6, 13107
20176; PWR6-NEXT:    sub 3, 3, 5
20177; PWR6-NEXT:    rldimi 6, 6, 32, 0
20178; PWR6-NEXT:    sub 4, 4, 8
20179; PWR6-NEXT:    and 8, 3, 6
20180; PWR6-NEXT:    rotldi 3, 3, 62
20181; PWR6-NEXT:    and 3, 3, 6
20182; PWR6-NEXT:    lis 7, 3855
20183; PWR6-NEXT:    and 5, 4, 6
20184; PWR6-NEXT:    rotldi 4, 4, 62
20185; PWR6-NEXT:    add 3, 8, 3
20186; PWR6-NEXT:    lis 9, 257
20187; PWR6-NEXT:    ori 7, 7, 3855
20188; PWR6-NEXT:    and 4, 4, 6
20189; PWR6-NEXT:    rldicl 6, 3, 60, 4
20190; PWR6-NEXT:    ori 9, 9, 257
20191; PWR6-NEXT:    rldimi 7, 7, 32, 0
20192; PWR6-NEXT:    add 4, 5, 4
20193; PWR6-NEXT:    add 3, 3, 6
20194; PWR6-NEXT:    rldimi 9, 9, 32, 0
20195; PWR6-NEXT:    rldicl 5, 4, 60, 4
20196; PWR6-NEXT:    and 3, 3, 7
20197; PWR6-NEXT:    add 4, 4, 5
20198; PWR6-NEXT:    mulld 3, 3, 9
20199; PWR6-NEXT:    and 4, 4, 7
20200; PWR6-NEXT:    rldicl 3, 3, 8, 56
20201; PWR6-NEXT:    mulld 4, 4, 9
20202; PWR6-NEXT:    li 5, 32
20203; PWR6-NEXT:    subfic 3, 3, 32
20204; PWR6-NEXT:    rldicl 4, 4, 8, 56
20205; PWR6-NEXT:    subfe 3, 5, 5
20206; PWR6-NEXT:    subfic 4, 4, 32
20207; PWR6-NEXT:    subfe 4, 5, 5
20208; PWR6-NEXT:    blr
20209;
20210; PWR7-LABEL: ugt_32_v2i64:
20211; PWR7:       # %bb.0:
20212; PWR7-NEXT:    addi 3, 1, -32
20213; PWR7-NEXT:    li 5, 0
20214; PWR7-NEXT:    li 6, -1
20215; PWR7-NEXT:    stxvd2x 34, 0, 3
20216; PWR7-NEXT:    ld 3, -24(1)
20217; PWR7-NEXT:    ld 4, -32(1)
20218; PWR7-NEXT:    popcntd 3, 3
20219; PWR7-NEXT:    popcntd 4, 4
20220; PWR7-NEXT:    cmpldi 3, 32
20221; PWR7-NEXT:    iselgt 3, 6, 5
20222; PWR7-NEXT:    cmpldi 4, 32
20223; PWR7-NEXT:    iselgt 4, 6, 5
20224; PWR7-NEXT:    std 3, -8(1)
20225; PWR7-NEXT:    addi 3, 1, -16
20226; PWR7-NEXT:    std 4, -16(1)
20227; PWR7-NEXT:    lxvd2x 34, 0, 3
20228; PWR7-NEXT:    blr
20229;
20230; PWR8-LABEL: ugt_32_v2i64:
20231; PWR8:       # %bb.0:
20232; PWR8-NEXT:    addis 3, 2, .LCPI162_0@toc@ha
20233; PWR8-NEXT:    vpopcntd 2, 2
20234; PWR8-NEXT:    addi 3, 3, .LCPI162_0@toc@l
20235; PWR8-NEXT:    lxvd2x 35, 0, 3
20236; PWR8-NEXT:    vcmpgtud 2, 2, 3
20237; PWR8-NEXT:    blr
20238;
20239; PWR9-LABEL: ugt_32_v2i64:
20240; PWR9:       # %bb.0:
20241; PWR9-NEXT:    addis 3, 2, .LCPI162_0@toc@ha
20242; PWR9-NEXT:    vpopcntd 2, 2
20243; PWR9-NEXT:    addi 3, 3, .LCPI162_0@toc@l
20244; PWR9-NEXT:    lxvx 35, 0, 3
20245; PWR9-NEXT:    vcmpgtud 2, 2, 3
20246; PWR9-NEXT:    blr
20247  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20248  %3 = icmp ugt <2 x i64> %2, <i64 32, i64 32>
20249  %4 = sext <2 x i1> %3 to <2 x i64>
20250  ret <2 x i64> %4
20251}
20252
20253define <2 x i64> @ult_33_v2i64(<2 x i64> %0) {
20254; PWR5-LABEL: ult_33_v2i64:
20255; PWR5:       # %bb.0:
20256; PWR5-NEXT:    lis 5, 21845
20257; PWR5-NEXT:    lis 6, 13107
20258; PWR5-NEXT:    ori 5, 5, 21845
20259; PWR5-NEXT:    rotldi 8, 4, 63
20260; PWR5-NEXT:    rotldi 9, 3, 63
20261; PWR5-NEXT:    rldimi 5, 5, 32, 0
20262; PWR5-NEXT:    and 8, 8, 5
20263; PWR5-NEXT:    and 5, 9, 5
20264; PWR5-NEXT:    ori 6, 6, 13107
20265; PWR5-NEXT:    sub 3, 3, 5
20266; PWR5-NEXT:    rldimi 6, 6, 32, 0
20267; PWR5-NEXT:    sub 4, 4, 8
20268; PWR5-NEXT:    and 8, 3, 6
20269; PWR5-NEXT:    rotldi 3, 3, 62
20270; PWR5-NEXT:    and 3, 3, 6
20271; PWR5-NEXT:    lis 7, 3855
20272; PWR5-NEXT:    and 5, 4, 6
20273; PWR5-NEXT:    rotldi 4, 4, 62
20274; PWR5-NEXT:    add 3, 8, 3
20275; PWR5-NEXT:    lis 9, 257
20276; PWR5-NEXT:    ori 7, 7, 3855
20277; PWR5-NEXT:    and 4, 4, 6
20278; PWR5-NEXT:    rldicl 6, 3, 60, 4
20279; PWR5-NEXT:    ori 9, 9, 257
20280; PWR5-NEXT:    rldimi 7, 7, 32, 0
20281; PWR5-NEXT:    add 4, 5, 4
20282; PWR5-NEXT:    add 3, 3, 6
20283; PWR5-NEXT:    rldimi 9, 9, 32, 0
20284; PWR5-NEXT:    rldicl 5, 4, 60, 4
20285; PWR5-NEXT:    and 3, 3, 7
20286; PWR5-NEXT:    add 4, 4, 5
20287; PWR5-NEXT:    mulld 3, 3, 9
20288; PWR5-NEXT:    and 4, 4, 7
20289; PWR5-NEXT:    rldicl 3, 3, 8, 56
20290; PWR5-NEXT:    li 5, 33
20291; PWR5-NEXT:    mulld 4, 4, 9
20292; PWR5-NEXT:    subc 6, 3, 5
20293; PWR5-NEXT:    rldicl 4, 4, 8, 56
20294; PWR5-NEXT:    subfe 3, 3, 3
20295; PWR5-NEXT:    subc 5, 4, 5
20296; PWR5-NEXT:    subfe 4, 4, 4
20297; PWR5-NEXT:    blr
20298;
20299; PWR6-LABEL: ult_33_v2i64:
20300; PWR6:       # %bb.0:
20301; PWR6-NEXT:    lis 5, 21845
20302; PWR6-NEXT:    lis 6, 13107
20303; PWR6-NEXT:    ori 5, 5, 21845
20304; PWR6-NEXT:    rotldi 8, 4, 63
20305; PWR6-NEXT:    rotldi 9, 3, 63
20306; PWR6-NEXT:    rldimi 5, 5, 32, 0
20307; PWR6-NEXT:    and 8, 8, 5
20308; PWR6-NEXT:    and 5, 9, 5
20309; PWR6-NEXT:    ori 6, 6, 13107
20310; PWR6-NEXT:    sub 3, 3, 5
20311; PWR6-NEXT:    rldimi 6, 6, 32, 0
20312; PWR6-NEXT:    sub 4, 4, 8
20313; PWR6-NEXT:    and 8, 3, 6
20314; PWR6-NEXT:    rotldi 3, 3, 62
20315; PWR6-NEXT:    and 3, 3, 6
20316; PWR6-NEXT:    lis 7, 3855
20317; PWR6-NEXT:    and 5, 4, 6
20318; PWR6-NEXT:    rotldi 4, 4, 62
20319; PWR6-NEXT:    add 3, 8, 3
20320; PWR6-NEXT:    lis 9, 257
20321; PWR6-NEXT:    ori 7, 7, 3855
20322; PWR6-NEXT:    and 4, 4, 6
20323; PWR6-NEXT:    rldicl 6, 3, 60, 4
20324; PWR6-NEXT:    ori 9, 9, 257
20325; PWR6-NEXT:    rldimi 7, 7, 32, 0
20326; PWR6-NEXT:    add 4, 5, 4
20327; PWR6-NEXT:    add 3, 3, 6
20328; PWR6-NEXT:    rldimi 9, 9, 32, 0
20329; PWR6-NEXT:    rldicl 5, 4, 60, 4
20330; PWR6-NEXT:    and 3, 3, 7
20331; PWR6-NEXT:    add 4, 4, 5
20332; PWR6-NEXT:    mulld 3, 3, 9
20333; PWR6-NEXT:    and 4, 4, 7
20334; PWR6-NEXT:    rldicl 3, 3, 8, 56
20335; PWR6-NEXT:    li 5, 33
20336; PWR6-NEXT:    mulld 4, 4, 9
20337; PWR6-NEXT:    subc 6, 3, 5
20338; PWR6-NEXT:    rldicl 4, 4, 8, 56
20339; PWR6-NEXT:    subfe 3, 3, 3
20340; PWR6-NEXT:    subc 5, 4, 5
20341; PWR6-NEXT:    subfe 4, 4, 4
20342; PWR6-NEXT:    blr
20343;
20344; PWR7-LABEL: ult_33_v2i64:
20345; PWR7:       # %bb.0:
20346; PWR7-NEXT:    addi 3, 1, -32
20347; PWR7-NEXT:    li 5, 0
20348; PWR7-NEXT:    li 6, -1
20349; PWR7-NEXT:    stxvd2x 34, 0, 3
20350; PWR7-NEXT:    ld 3, -24(1)
20351; PWR7-NEXT:    ld 4, -32(1)
20352; PWR7-NEXT:    popcntd 3, 3
20353; PWR7-NEXT:    popcntd 4, 4
20354; PWR7-NEXT:    cmpldi 3, 33
20355; PWR7-NEXT:    isellt 3, 6, 5
20356; PWR7-NEXT:    cmpldi 4, 33
20357; PWR7-NEXT:    isellt 4, 6, 5
20358; PWR7-NEXT:    std 3, -8(1)
20359; PWR7-NEXT:    addi 3, 1, -16
20360; PWR7-NEXT:    std 4, -16(1)
20361; PWR7-NEXT:    lxvd2x 34, 0, 3
20362; PWR7-NEXT:    blr
20363;
20364; PWR8-LABEL: ult_33_v2i64:
20365; PWR8:       # %bb.0:
20366; PWR8-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
20367; PWR8-NEXT:    vpopcntd 2, 2
20368; PWR8-NEXT:    addi 3, 3, .LCPI163_0@toc@l
20369; PWR8-NEXT:    lxvd2x 35, 0, 3
20370; PWR8-NEXT:    vcmpgtud 2, 3, 2
20371; PWR8-NEXT:    blr
20372;
20373; PWR9-LABEL: ult_33_v2i64:
20374; PWR9:       # %bb.0:
20375; PWR9-NEXT:    addis 3, 2, .LCPI163_0@toc@ha
20376; PWR9-NEXT:    vpopcntd 2, 2
20377; PWR9-NEXT:    addi 3, 3, .LCPI163_0@toc@l
20378; PWR9-NEXT:    lxvx 35, 0, 3
20379; PWR9-NEXT:    vcmpgtud 2, 3, 2
20380; PWR9-NEXT:    blr
20381  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20382  %3 = icmp ult <2 x i64> %2, <i64 33, i64 33>
20383  %4 = sext <2 x i1> %3 to <2 x i64>
20384  ret <2 x i64> %4
20385}
20386
20387define <2 x i64> @ugt_33_v2i64(<2 x i64> %0) {
20388; PWR5-LABEL: ugt_33_v2i64:
20389; PWR5:       # %bb.0:
20390; PWR5-NEXT:    lis 5, 21845
20391; PWR5-NEXT:    lis 6, 13107
20392; PWR5-NEXT:    ori 5, 5, 21845
20393; PWR5-NEXT:    rotldi 8, 4, 63
20394; PWR5-NEXT:    rotldi 9, 3, 63
20395; PWR5-NEXT:    rldimi 5, 5, 32, 0
20396; PWR5-NEXT:    and 8, 8, 5
20397; PWR5-NEXT:    and 5, 9, 5
20398; PWR5-NEXT:    ori 6, 6, 13107
20399; PWR5-NEXT:    sub 3, 3, 5
20400; PWR5-NEXT:    rldimi 6, 6, 32, 0
20401; PWR5-NEXT:    sub 4, 4, 8
20402; PWR5-NEXT:    and 8, 3, 6
20403; PWR5-NEXT:    rotldi 3, 3, 62
20404; PWR5-NEXT:    and 3, 3, 6
20405; PWR5-NEXT:    lis 7, 3855
20406; PWR5-NEXT:    and 5, 4, 6
20407; PWR5-NEXT:    rotldi 4, 4, 62
20408; PWR5-NEXT:    add 3, 8, 3
20409; PWR5-NEXT:    lis 9, 257
20410; PWR5-NEXT:    ori 7, 7, 3855
20411; PWR5-NEXT:    and 4, 4, 6
20412; PWR5-NEXT:    rldicl 6, 3, 60, 4
20413; PWR5-NEXT:    ori 9, 9, 257
20414; PWR5-NEXT:    rldimi 7, 7, 32, 0
20415; PWR5-NEXT:    add 4, 5, 4
20416; PWR5-NEXT:    add 3, 3, 6
20417; PWR5-NEXT:    rldimi 9, 9, 32, 0
20418; PWR5-NEXT:    rldicl 5, 4, 60, 4
20419; PWR5-NEXT:    and 3, 3, 7
20420; PWR5-NEXT:    add 4, 4, 5
20421; PWR5-NEXT:    mulld 3, 3, 9
20422; PWR5-NEXT:    and 4, 4, 7
20423; PWR5-NEXT:    rldicl 3, 3, 8, 56
20424; PWR5-NEXT:    mulld 4, 4, 9
20425; PWR5-NEXT:    li 5, 33
20426; PWR5-NEXT:    subfic 3, 3, 33
20427; PWR5-NEXT:    rldicl 4, 4, 8, 56
20428; PWR5-NEXT:    subfe 3, 5, 5
20429; PWR5-NEXT:    subfic 4, 4, 33
20430; PWR5-NEXT:    subfe 4, 5, 5
20431; PWR5-NEXT:    blr
20432;
20433; PWR6-LABEL: ugt_33_v2i64:
20434; PWR6:       # %bb.0:
20435; PWR6-NEXT:    lis 5, 21845
20436; PWR6-NEXT:    lis 6, 13107
20437; PWR6-NEXT:    ori 5, 5, 21845
20438; PWR6-NEXT:    rotldi 8, 4, 63
20439; PWR6-NEXT:    rotldi 9, 3, 63
20440; PWR6-NEXT:    rldimi 5, 5, 32, 0
20441; PWR6-NEXT:    and 8, 8, 5
20442; PWR6-NEXT:    and 5, 9, 5
20443; PWR6-NEXT:    ori 6, 6, 13107
20444; PWR6-NEXT:    sub 3, 3, 5
20445; PWR6-NEXT:    rldimi 6, 6, 32, 0
20446; PWR6-NEXT:    sub 4, 4, 8
20447; PWR6-NEXT:    and 8, 3, 6
20448; PWR6-NEXT:    rotldi 3, 3, 62
20449; PWR6-NEXT:    and 3, 3, 6
20450; PWR6-NEXT:    lis 7, 3855
20451; PWR6-NEXT:    and 5, 4, 6
20452; PWR6-NEXT:    rotldi 4, 4, 62
20453; PWR6-NEXT:    add 3, 8, 3
20454; PWR6-NEXT:    lis 9, 257
20455; PWR6-NEXT:    ori 7, 7, 3855
20456; PWR6-NEXT:    and 4, 4, 6
20457; PWR6-NEXT:    rldicl 6, 3, 60, 4
20458; PWR6-NEXT:    ori 9, 9, 257
20459; PWR6-NEXT:    rldimi 7, 7, 32, 0
20460; PWR6-NEXT:    add 4, 5, 4
20461; PWR6-NEXT:    add 3, 3, 6
20462; PWR6-NEXT:    rldimi 9, 9, 32, 0
20463; PWR6-NEXT:    rldicl 5, 4, 60, 4
20464; PWR6-NEXT:    and 3, 3, 7
20465; PWR6-NEXT:    add 4, 4, 5
20466; PWR6-NEXT:    mulld 3, 3, 9
20467; PWR6-NEXT:    and 4, 4, 7
20468; PWR6-NEXT:    rldicl 3, 3, 8, 56
20469; PWR6-NEXT:    mulld 4, 4, 9
20470; PWR6-NEXT:    li 5, 33
20471; PWR6-NEXT:    subfic 3, 3, 33
20472; PWR6-NEXT:    rldicl 4, 4, 8, 56
20473; PWR6-NEXT:    subfe 3, 5, 5
20474; PWR6-NEXT:    subfic 4, 4, 33
20475; PWR6-NEXT:    subfe 4, 5, 5
20476; PWR6-NEXT:    blr
20477;
20478; PWR7-LABEL: ugt_33_v2i64:
20479; PWR7:       # %bb.0:
20480; PWR7-NEXT:    addi 3, 1, -32
20481; PWR7-NEXT:    li 5, 0
20482; PWR7-NEXT:    li 6, -1
20483; PWR7-NEXT:    stxvd2x 34, 0, 3
20484; PWR7-NEXT:    ld 3, -24(1)
20485; PWR7-NEXT:    ld 4, -32(1)
20486; PWR7-NEXT:    popcntd 3, 3
20487; PWR7-NEXT:    popcntd 4, 4
20488; PWR7-NEXT:    cmpldi 3, 33
20489; PWR7-NEXT:    iselgt 3, 6, 5
20490; PWR7-NEXT:    cmpldi 4, 33
20491; PWR7-NEXT:    iselgt 4, 6, 5
20492; PWR7-NEXT:    std 3, -8(1)
20493; PWR7-NEXT:    addi 3, 1, -16
20494; PWR7-NEXT:    std 4, -16(1)
20495; PWR7-NEXT:    lxvd2x 34, 0, 3
20496; PWR7-NEXT:    blr
20497;
20498; PWR8-LABEL: ugt_33_v2i64:
20499; PWR8:       # %bb.0:
20500; PWR8-NEXT:    addis 3, 2, .LCPI164_0@toc@ha
20501; PWR8-NEXT:    vpopcntd 2, 2
20502; PWR8-NEXT:    addi 3, 3, .LCPI164_0@toc@l
20503; PWR8-NEXT:    lxvd2x 35, 0, 3
20504; PWR8-NEXT:    vcmpgtud 2, 2, 3
20505; PWR8-NEXT:    blr
20506;
20507; PWR9-LABEL: ugt_33_v2i64:
20508; PWR9:       # %bb.0:
20509; PWR9-NEXT:    addis 3, 2, .LCPI164_0@toc@ha
20510; PWR9-NEXT:    vpopcntd 2, 2
20511; PWR9-NEXT:    addi 3, 3, .LCPI164_0@toc@l
20512; PWR9-NEXT:    lxvx 35, 0, 3
20513; PWR9-NEXT:    vcmpgtud 2, 2, 3
20514; PWR9-NEXT:    blr
20515  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20516  %3 = icmp ugt <2 x i64> %2, <i64 33, i64 33>
20517  %4 = sext <2 x i1> %3 to <2 x i64>
20518  ret <2 x i64> %4
20519}
20520
20521define <2 x i64> @ult_34_v2i64(<2 x i64> %0) {
20522; PWR5-LABEL: ult_34_v2i64:
20523; PWR5:       # %bb.0:
20524; PWR5-NEXT:    lis 5, 21845
20525; PWR5-NEXT:    lis 6, 13107
20526; PWR5-NEXT:    ori 5, 5, 21845
20527; PWR5-NEXT:    rotldi 8, 4, 63
20528; PWR5-NEXT:    rotldi 9, 3, 63
20529; PWR5-NEXT:    rldimi 5, 5, 32, 0
20530; PWR5-NEXT:    and 8, 8, 5
20531; PWR5-NEXT:    and 5, 9, 5
20532; PWR5-NEXT:    ori 6, 6, 13107
20533; PWR5-NEXT:    sub 3, 3, 5
20534; PWR5-NEXT:    rldimi 6, 6, 32, 0
20535; PWR5-NEXT:    sub 4, 4, 8
20536; PWR5-NEXT:    and 8, 3, 6
20537; PWR5-NEXT:    rotldi 3, 3, 62
20538; PWR5-NEXT:    and 3, 3, 6
20539; PWR5-NEXT:    lis 7, 3855
20540; PWR5-NEXT:    and 5, 4, 6
20541; PWR5-NEXT:    rotldi 4, 4, 62
20542; PWR5-NEXT:    add 3, 8, 3
20543; PWR5-NEXT:    lis 9, 257
20544; PWR5-NEXT:    ori 7, 7, 3855
20545; PWR5-NEXT:    and 4, 4, 6
20546; PWR5-NEXT:    rldicl 6, 3, 60, 4
20547; PWR5-NEXT:    ori 9, 9, 257
20548; PWR5-NEXT:    rldimi 7, 7, 32, 0
20549; PWR5-NEXT:    add 4, 5, 4
20550; PWR5-NEXT:    add 3, 3, 6
20551; PWR5-NEXT:    rldimi 9, 9, 32, 0
20552; PWR5-NEXT:    rldicl 5, 4, 60, 4
20553; PWR5-NEXT:    and 3, 3, 7
20554; PWR5-NEXT:    add 4, 4, 5
20555; PWR5-NEXT:    mulld 3, 3, 9
20556; PWR5-NEXT:    and 4, 4, 7
20557; PWR5-NEXT:    rldicl 3, 3, 8, 56
20558; PWR5-NEXT:    li 5, 34
20559; PWR5-NEXT:    mulld 4, 4, 9
20560; PWR5-NEXT:    subc 6, 3, 5
20561; PWR5-NEXT:    rldicl 4, 4, 8, 56
20562; PWR5-NEXT:    subfe 3, 3, 3
20563; PWR5-NEXT:    subc 5, 4, 5
20564; PWR5-NEXT:    subfe 4, 4, 4
20565; PWR5-NEXT:    blr
20566;
20567; PWR6-LABEL: ult_34_v2i64:
20568; PWR6:       # %bb.0:
20569; PWR6-NEXT:    lis 5, 21845
20570; PWR6-NEXT:    lis 6, 13107
20571; PWR6-NEXT:    ori 5, 5, 21845
20572; PWR6-NEXT:    rotldi 8, 4, 63
20573; PWR6-NEXT:    rotldi 9, 3, 63
20574; PWR6-NEXT:    rldimi 5, 5, 32, 0
20575; PWR6-NEXT:    and 8, 8, 5
20576; PWR6-NEXT:    and 5, 9, 5
20577; PWR6-NEXT:    ori 6, 6, 13107
20578; PWR6-NEXT:    sub 3, 3, 5
20579; PWR6-NEXT:    rldimi 6, 6, 32, 0
20580; PWR6-NEXT:    sub 4, 4, 8
20581; PWR6-NEXT:    and 8, 3, 6
20582; PWR6-NEXT:    rotldi 3, 3, 62
20583; PWR6-NEXT:    and 3, 3, 6
20584; PWR6-NEXT:    lis 7, 3855
20585; PWR6-NEXT:    and 5, 4, 6
20586; PWR6-NEXT:    rotldi 4, 4, 62
20587; PWR6-NEXT:    add 3, 8, 3
20588; PWR6-NEXT:    lis 9, 257
20589; PWR6-NEXT:    ori 7, 7, 3855
20590; PWR6-NEXT:    and 4, 4, 6
20591; PWR6-NEXT:    rldicl 6, 3, 60, 4
20592; PWR6-NEXT:    ori 9, 9, 257
20593; PWR6-NEXT:    rldimi 7, 7, 32, 0
20594; PWR6-NEXT:    add 4, 5, 4
20595; PWR6-NEXT:    add 3, 3, 6
20596; PWR6-NEXT:    rldimi 9, 9, 32, 0
20597; PWR6-NEXT:    rldicl 5, 4, 60, 4
20598; PWR6-NEXT:    and 3, 3, 7
20599; PWR6-NEXT:    add 4, 4, 5
20600; PWR6-NEXT:    mulld 3, 3, 9
20601; PWR6-NEXT:    and 4, 4, 7
20602; PWR6-NEXT:    rldicl 3, 3, 8, 56
20603; PWR6-NEXT:    li 5, 34
20604; PWR6-NEXT:    mulld 4, 4, 9
20605; PWR6-NEXT:    subc 6, 3, 5
20606; PWR6-NEXT:    rldicl 4, 4, 8, 56
20607; PWR6-NEXT:    subfe 3, 3, 3
20608; PWR6-NEXT:    subc 5, 4, 5
20609; PWR6-NEXT:    subfe 4, 4, 4
20610; PWR6-NEXT:    blr
20611;
20612; PWR7-LABEL: ult_34_v2i64:
20613; PWR7:       # %bb.0:
20614; PWR7-NEXT:    addi 3, 1, -32
20615; PWR7-NEXT:    li 5, 0
20616; PWR7-NEXT:    li 6, -1
20617; PWR7-NEXT:    stxvd2x 34, 0, 3
20618; PWR7-NEXT:    ld 3, -24(1)
20619; PWR7-NEXT:    ld 4, -32(1)
20620; PWR7-NEXT:    popcntd 3, 3
20621; PWR7-NEXT:    popcntd 4, 4
20622; PWR7-NEXT:    cmpldi 3, 34
20623; PWR7-NEXT:    isellt 3, 6, 5
20624; PWR7-NEXT:    cmpldi 4, 34
20625; PWR7-NEXT:    isellt 4, 6, 5
20626; PWR7-NEXT:    std 3, -8(1)
20627; PWR7-NEXT:    addi 3, 1, -16
20628; PWR7-NEXT:    std 4, -16(1)
20629; PWR7-NEXT:    lxvd2x 34, 0, 3
20630; PWR7-NEXT:    blr
20631;
20632; PWR8-LABEL: ult_34_v2i64:
20633; PWR8:       # %bb.0:
20634; PWR8-NEXT:    addis 3, 2, .LCPI165_0@toc@ha
20635; PWR8-NEXT:    vpopcntd 2, 2
20636; PWR8-NEXT:    addi 3, 3, .LCPI165_0@toc@l
20637; PWR8-NEXT:    lxvd2x 35, 0, 3
20638; PWR8-NEXT:    vcmpgtud 2, 3, 2
20639; PWR8-NEXT:    blr
20640;
20641; PWR9-LABEL: ult_34_v2i64:
20642; PWR9:       # %bb.0:
20643; PWR9-NEXT:    addis 3, 2, .LCPI165_0@toc@ha
20644; PWR9-NEXT:    vpopcntd 2, 2
20645; PWR9-NEXT:    addi 3, 3, .LCPI165_0@toc@l
20646; PWR9-NEXT:    lxvx 35, 0, 3
20647; PWR9-NEXT:    vcmpgtud 2, 3, 2
20648; PWR9-NEXT:    blr
20649  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20650  %3 = icmp ult <2 x i64> %2, <i64 34, i64 34>
20651  %4 = sext <2 x i1> %3 to <2 x i64>
20652  ret <2 x i64> %4
20653}
20654
20655define <2 x i64> @ugt_34_v2i64(<2 x i64> %0) {
20656; PWR5-LABEL: ugt_34_v2i64:
20657; PWR5:       # %bb.0:
20658; PWR5-NEXT:    lis 5, 21845
20659; PWR5-NEXT:    lis 6, 13107
20660; PWR5-NEXT:    ori 5, 5, 21845
20661; PWR5-NEXT:    rotldi 8, 4, 63
20662; PWR5-NEXT:    rotldi 9, 3, 63
20663; PWR5-NEXT:    rldimi 5, 5, 32, 0
20664; PWR5-NEXT:    and 8, 8, 5
20665; PWR5-NEXT:    and 5, 9, 5
20666; PWR5-NEXT:    ori 6, 6, 13107
20667; PWR5-NEXT:    sub 3, 3, 5
20668; PWR5-NEXT:    rldimi 6, 6, 32, 0
20669; PWR5-NEXT:    sub 4, 4, 8
20670; PWR5-NEXT:    and 8, 3, 6
20671; PWR5-NEXT:    rotldi 3, 3, 62
20672; PWR5-NEXT:    and 3, 3, 6
20673; PWR5-NEXT:    lis 7, 3855
20674; PWR5-NEXT:    and 5, 4, 6
20675; PWR5-NEXT:    rotldi 4, 4, 62
20676; PWR5-NEXT:    add 3, 8, 3
20677; PWR5-NEXT:    lis 9, 257
20678; PWR5-NEXT:    ori 7, 7, 3855
20679; PWR5-NEXT:    and 4, 4, 6
20680; PWR5-NEXT:    rldicl 6, 3, 60, 4
20681; PWR5-NEXT:    ori 9, 9, 257
20682; PWR5-NEXT:    rldimi 7, 7, 32, 0
20683; PWR5-NEXT:    add 4, 5, 4
20684; PWR5-NEXT:    add 3, 3, 6
20685; PWR5-NEXT:    rldimi 9, 9, 32, 0
20686; PWR5-NEXT:    rldicl 5, 4, 60, 4
20687; PWR5-NEXT:    and 3, 3, 7
20688; PWR5-NEXT:    add 4, 4, 5
20689; PWR5-NEXT:    mulld 3, 3, 9
20690; PWR5-NEXT:    and 4, 4, 7
20691; PWR5-NEXT:    rldicl 3, 3, 8, 56
20692; PWR5-NEXT:    mulld 4, 4, 9
20693; PWR5-NEXT:    li 5, 34
20694; PWR5-NEXT:    subfic 3, 3, 34
20695; PWR5-NEXT:    rldicl 4, 4, 8, 56
20696; PWR5-NEXT:    subfe 3, 5, 5
20697; PWR5-NEXT:    subfic 4, 4, 34
20698; PWR5-NEXT:    subfe 4, 5, 5
20699; PWR5-NEXT:    blr
20700;
20701; PWR6-LABEL: ugt_34_v2i64:
20702; PWR6:       # %bb.0:
20703; PWR6-NEXT:    lis 5, 21845
20704; PWR6-NEXT:    lis 6, 13107
20705; PWR6-NEXT:    ori 5, 5, 21845
20706; PWR6-NEXT:    rotldi 8, 4, 63
20707; PWR6-NEXT:    rotldi 9, 3, 63
20708; PWR6-NEXT:    rldimi 5, 5, 32, 0
20709; PWR6-NEXT:    and 8, 8, 5
20710; PWR6-NEXT:    and 5, 9, 5
20711; PWR6-NEXT:    ori 6, 6, 13107
20712; PWR6-NEXT:    sub 3, 3, 5
20713; PWR6-NEXT:    rldimi 6, 6, 32, 0
20714; PWR6-NEXT:    sub 4, 4, 8
20715; PWR6-NEXT:    and 8, 3, 6
20716; PWR6-NEXT:    rotldi 3, 3, 62
20717; PWR6-NEXT:    and 3, 3, 6
20718; PWR6-NEXT:    lis 7, 3855
20719; PWR6-NEXT:    and 5, 4, 6
20720; PWR6-NEXT:    rotldi 4, 4, 62
20721; PWR6-NEXT:    add 3, 8, 3
20722; PWR6-NEXT:    lis 9, 257
20723; PWR6-NEXT:    ori 7, 7, 3855
20724; PWR6-NEXT:    and 4, 4, 6
20725; PWR6-NEXT:    rldicl 6, 3, 60, 4
20726; PWR6-NEXT:    ori 9, 9, 257
20727; PWR6-NEXT:    rldimi 7, 7, 32, 0
20728; PWR6-NEXT:    add 4, 5, 4
20729; PWR6-NEXT:    add 3, 3, 6
20730; PWR6-NEXT:    rldimi 9, 9, 32, 0
20731; PWR6-NEXT:    rldicl 5, 4, 60, 4
20732; PWR6-NEXT:    and 3, 3, 7
20733; PWR6-NEXT:    add 4, 4, 5
20734; PWR6-NEXT:    mulld 3, 3, 9
20735; PWR6-NEXT:    and 4, 4, 7
20736; PWR6-NEXT:    rldicl 3, 3, 8, 56
20737; PWR6-NEXT:    mulld 4, 4, 9
20738; PWR6-NEXT:    li 5, 34
20739; PWR6-NEXT:    subfic 3, 3, 34
20740; PWR6-NEXT:    rldicl 4, 4, 8, 56
20741; PWR6-NEXT:    subfe 3, 5, 5
20742; PWR6-NEXT:    subfic 4, 4, 34
20743; PWR6-NEXT:    subfe 4, 5, 5
20744; PWR6-NEXT:    blr
20745;
20746; PWR7-LABEL: ugt_34_v2i64:
20747; PWR7:       # %bb.0:
20748; PWR7-NEXT:    addi 3, 1, -32
20749; PWR7-NEXT:    li 5, 0
20750; PWR7-NEXT:    li 6, -1
20751; PWR7-NEXT:    stxvd2x 34, 0, 3
20752; PWR7-NEXT:    ld 3, -24(1)
20753; PWR7-NEXT:    ld 4, -32(1)
20754; PWR7-NEXT:    popcntd 3, 3
20755; PWR7-NEXT:    popcntd 4, 4
20756; PWR7-NEXT:    cmpldi 3, 34
20757; PWR7-NEXT:    iselgt 3, 6, 5
20758; PWR7-NEXT:    cmpldi 4, 34
20759; PWR7-NEXT:    iselgt 4, 6, 5
20760; PWR7-NEXT:    std 3, -8(1)
20761; PWR7-NEXT:    addi 3, 1, -16
20762; PWR7-NEXT:    std 4, -16(1)
20763; PWR7-NEXT:    lxvd2x 34, 0, 3
20764; PWR7-NEXT:    blr
20765;
20766; PWR8-LABEL: ugt_34_v2i64:
20767; PWR8:       # %bb.0:
20768; PWR8-NEXT:    addis 3, 2, .LCPI166_0@toc@ha
20769; PWR8-NEXT:    vpopcntd 2, 2
20770; PWR8-NEXT:    addi 3, 3, .LCPI166_0@toc@l
20771; PWR8-NEXT:    lxvd2x 35, 0, 3
20772; PWR8-NEXT:    vcmpgtud 2, 2, 3
20773; PWR8-NEXT:    blr
20774;
20775; PWR9-LABEL: ugt_34_v2i64:
20776; PWR9:       # %bb.0:
20777; PWR9-NEXT:    addis 3, 2, .LCPI166_0@toc@ha
20778; PWR9-NEXT:    vpopcntd 2, 2
20779; PWR9-NEXT:    addi 3, 3, .LCPI166_0@toc@l
20780; PWR9-NEXT:    lxvx 35, 0, 3
20781; PWR9-NEXT:    vcmpgtud 2, 2, 3
20782; PWR9-NEXT:    blr
20783  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20784  %3 = icmp ugt <2 x i64> %2, <i64 34, i64 34>
20785  %4 = sext <2 x i1> %3 to <2 x i64>
20786  ret <2 x i64> %4
20787}
20788
20789define <2 x i64> @ult_35_v2i64(<2 x i64> %0) {
20790; PWR5-LABEL: ult_35_v2i64:
20791; PWR5:       # %bb.0:
20792; PWR5-NEXT:    lis 5, 21845
20793; PWR5-NEXT:    lis 6, 13107
20794; PWR5-NEXT:    ori 5, 5, 21845
20795; PWR5-NEXT:    rotldi 8, 4, 63
20796; PWR5-NEXT:    rotldi 9, 3, 63
20797; PWR5-NEXT:    rldimi 5, 5, 32, 0
20798; PWR5-NEXT:    and 8, 8, 5
20799; PWR5-NEXT:    and 5, 9, 5
20800; PWR5-NEXT:    ori 6, 6, 13107
20801; PWR5-NEXT:    sub 3, 3, 5
20802; PWR5-NEXT:    rldimi 6, 6, 32, 0
20803; PWR5-NEXT:    sub 4, 4, 8
20804; PWR5-NEXT:    and 8, 3, 6
20805; PWR5-NEXT:    rotldi 3, 3, 62
20806; PWR5-NEXT:    and 3, 3, 6
20807; PWR5-NEXT:    lis 7, 3855
20808; PWR5-NEXT:    and 5, 4, 6
20809; PWR5-NEXT:    rotldi 4, 4, 62
20810; PWR5-NEXT:    add 3, 8, 3
20811; PWR5-NEXT:    lis 9, 257
20812; PWR5-NEXT:    ori 7, 7, 3855
20813; PWR5-NEXT:    and 4, 4, 6
20814; PWR5-NEXT:    rldicl 6, 3, 60, 4
20815; PWR5-NEXT:    ori 9, 9, 257
20816; PWR5-NEXT:    rldimi 7, 7, 32, 0
20817; PWR5-NEXT:    add 4, 5, 4
20818; PWR5-NEXT:    add 3, 3, 6
20819; PWR5-NEXT:    rldimi 9, 9, 32, 0
20820; PWR5-NEXT:    rldicl 5, 4, 60, 4
20821; PWR5-NEXT:    and 3, 3, 7
20822; PWR5-NEXT:    add 4, 4, 5
20823; PWR5-NEXT:    mulld 3, 3, 9
20824; PWR5-NEXT:    and 4, 4, 7
20825; PWR5-NEXT:    rldicl 3, 3, 8, 56
20826; PWR5-NEXT:    li 5, 35
20827; PWR5-NEXT:    mulld 4, 4, 9
20828; PWR5-NEXT:    subc 6, 3, 5
20829; PWR5-NEXT:    rldicl 4, 4, 8, 56
20830; PWR5-NEXT:    subfe 3, 3, 3
20831; PWR5-NEXT:    subc 5, 4, 5
20832; PWR5-NEXT:    subfe 4, 4, 4
20833; PWR5-NEXT:    blr
20834;
20835; PWR6-LABEL: ult_35_v2i64:
20836; PWR6:       # %bb.0:
20837; PWR6-NEXT:    lis 5, 21845
20838; PWR6-NEXT:    lis 6, 13107
20839; PWR6-NEXT:    ori 5, 5, 21845
20840; PWR6-NEXT:    rotldi 8, 4, 63
20841; PWR6-NEXT:    rotldi 9, 3, 63
20842; PWR6-NEXT:    rldimi 5, 5, 32, 0
20843; PWR6-NEXT:    and 8, 8, 5
20844; PWR6-NEXT:    and 5, 9, 5
20845; PWR6-NEXT:    ori 6, 6, 13107
20846; PWR6-NEXT:    sub 3, 3, 5
20847; PWR6-NEXT:    rldimi 6, 6, 32, 0
20848; PWR6-NEXT:    sub 4, 4, 8
20849; PWR6-NEXT:    and 8, 3, 6
20850; PWR6-NEXT:    rotldi 3, 3, 62
20851; PWR6-NEXT:    and 3, 3, 6
20852; PWR6-NEXT:    lis 7, 3855
20853; PWR6-NEXT:    and 5, 4, 6
20854; PWR6-NEXT:    rotldi 4, 4, 62
20855; PWR6-NEXT:    add 3, 8, 3
20856; PWR6-NEXT:    lis 9, 257
20857; PWR6-NEXT:    ori 7, 7, 3855
20858; PWR6-NEXT:    and 4, 4, 6
20859; PWR6-NEXT:    rldicl 6, 3, 60, 4
20860; PWR6-NEXT:    ori 9, 9, 257
20861; PWR6-NEXT:    rldimi 7, 7, 32, 0
20862; PWR6-NEXT:    add 4, 5, 4
20863; PWR6-NEXT:    add 3, 3, 6
20864; PWR6-NEXT:    rldimi 9, 9, 32, 0
20865; PWR6-NEXT:    rldicl 5, 4, 60, 4
20866; PWR6-NEXT:    and 3, 3, 7
20867; PWR6-NEXT:    add 4, 4, 5
20868; PWR6-NEXT:    mulld 3, 3, 9
20869; PWR6-NEXT:    and 4, 4, 7
20870; PWR6-NEXT:    rldicl 3, 3, 8, 56
20871; PWR6-NEXT:    li 5, 35
20872; PWR6-NEXT:    mulld 4, 4, 9
20873; PWR6-NEXT:    subc 6, 3, 5
20874; PWR6-NEXT:    rldicl 4, 4, 8, 56
20875; PWR6-NEXT:    subfe 3, 3, 3
20876; PWR6-NEXT:    subc 5, 4, 5
20877; PWR6-NEXT:    subfe 4, 4, 4
20878; PWR6-NEXT:    blr
20879;
20880; PWR7-LABEL: ult_35_v2i64:
20881; PWR7:       # %bb.0:
20882; PWR7-NEXT:    addi 3, 1, -32
20883; PWR7-NEXT:    li 5, 0
20884; PWR7-NEXT:    li 6, -1
20885; PWR7-NEXT:    stxvd2x 34, 0, 3
20886; PWR7-NEXT:    ld 3, -24(1)
20887; PWR7-NEXT:    ld 4, -32(1)
20888; PWR7-NEXT:    popcntd 3, 3
20889; PWR7-NEXT:    popcntd 4, 4
20890; PWR7-NEXT:    cmpldi 3, 35
20891; PWR7-NEXT:    isellt 3, 6, 5
20892; PWR7-NEXT:    cmpldi 4, 35
20893; PWR7-NEXT:    isellt 4, 6, 5
20894; PWR7-NEXT:    std 3, -8(1)
20895; PWR7-NEXT:    addi 3, 1, -16
20896; PWR7-NEXT:    std 4, -16(1)
20897; PWR7-NEXT:    lxvd2x 34, 0, 3
20898; PWR7-NEXT:    blr
20899;
20900; PWR8-LABEL: ult_35_v2i64:
20901; PWR8:       # %bb.0:
20902; PWR8-NEXT:    addis 3, 2, .LCPI167_0@toc@ha
20903; PWR8-NEXT:    vpopcntd 2, 2
20904; PWR8-NEXT:    addi 3, 3, .LCPI167_0@toc@l
20905; PWR8-NEXT:    lxvd2x 35, 0, 3
20906; PWR8-NEXT:    vcmpgtud 2, 3, 2
20907; PWR8-NEXT:    blr
20908;
20909; PWR9-LABEL: ult_35_v2i64:
20910; PWR9:       # %bb.0:
20911; PWR9-NEXT:    addis 3, 2, .LCPI167_0@toc@ha
20912; PWR9-NEXT:    vpopcntd 2, 2
20913; PWR9-NEXT:    addi 3, 3, .LCPI167_0@toc@l
20914; PWR9-NEXT:    lxvx 35, 0, 3
20915; PWR9-NEXT:    vcmpgtud 2, 3, 2
20916; PWR9-NEXT:    blr
20917  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
20918  %3 = icmp ult <2 x i64> %2, <i64 35, i64 35>
20919  %4 = sext <2 x i1> %3 to <2 x i64>
20920  ret <2 x i64> %4
20921}
20922
20923define <2 x i64> @ugt_35_v2i64(<2 x i64> %0) {
20924; PWR5-LABEL: ugt_35_v2i64:
20925; PWR5:       # %bb.0:
20926; PWR5-NEXT:    lis 5, 21845
20927; PWR5-NEXT:    lis 6, 13107
20928; PWR5-NEXT:    ori 5, 5, 21845
20929; PWR5-NEXT:    rotldi 8, 4, 63
20930; PWR5-NEXT:    rotldi 9, 3, 63
20931; PWR5-NEXT:    rldimi 5, 5, 32, 0
20932; PWR5-NEXT:    and 8, 8, 5
20933; PWR5-NEXT:    and 5, 9, 5
20934; PWR5-NEXT:    ori 6, 6, 13107
20935; PWR5-NEXT:    sub 3, 3, 5
20936; PWR5-NEXT:    rldimi 6, 6, 32, 0
20937; PWR5-NEXT:    sub 4, 4, 8
20938; PWR5-NEXT:    and 8, 3, 6
20939; PWR5-NEXT:    rotldi 3, 3, 62
20940; PWR5-NEXT:    and 3, 3, 6
20941; PWR5-NEXT:    lis 7, 3855
20942; PWR5-NEXT:    and 5, 4, 6
20943; PWR5-NEXT:    rotldi 4, 4, 62
20944; PWR5-NEXT:    add 3, 8, 3
20945; PWR5-NEXT:    lis 9, 257
20946; PWR5-NEXT:    ori 7, 7, 3855
20947; PWR5-NEXT:    and 4, 4, 6
20948; PWR5-NEXT:    rldicl 6, 3, 60, 4
20949; PWR5-NEXT:    ori 9, 9, 257
20950; PWR5-NEXT:    rldimi 7, 7, 32, 0
20951; PWR5-NEXT:    add 4, 5, 4
20952; PWR5-NEXT:    add 3, 3, 6
20953; PWR5-NEXT:    rldimi 9, 9, 32, 0
20954; PWR5-NEXT:    rldicl 5, 4, 60, 4
20955; PWR5-NEXT:    and 3, 3, 7
20956; PWR5-NEXT:    add 4, 4, 5
20957; PWR5-NEXT:    mulld 3, 3, 9
20958; PWR5-NEXT:    and 4, 4, 7
20959; PWR5-NEXT:    rldicl 3, 3, 8, 56
20960; PWR5-NEXT:    mulld 4, 4, 9
20961; PWR5-NEXT:    li 5, 35
20962; PWR5-NEXT:    subfic 3, 3, 35
20963; PWR5-NEXT:    rldicl 4, 4, 8, 56
20964; PWR5-NEXT:    subfe 3, 5, 5
20965; PWR5-NEXT:    subfic 4, 4, 35
20966; PWR5-NEXT:    subfe 4, 5, 5
20967; PWR5-NEXT:    blr
20968;
20969; PWR6-LABEL: ugt_35_v2i64:
20970; PWR6:       # %bb.0:
20971; PWR6-NEXT:    lis 5, 21845
20972; PWR6-NEXT:    lis 6, 13107
20973; PWR6-NEXT:    ori 5, 5, 21845
20974; PWR6-NEXT:    rotldi 8, 4, 63
20975; PWR6-NEXT:    rotldi 9, 3, 63
20976; PWR6-NEXT:    rldimi 5, 5, 32, 0
20977; PWR6-NEXT:    and 8, 8, 5
20978; PWR6-NEXT:    and 5, 9, 5
20979; PWR6-NEXT:    ori 6, 6, 13107
20980; PWR6-NEXT:    sub 3, 3, 5
20981; PWR6-NEXT:    rldimi 6, 6, 32, 0
20982; PWR6-NEXT:    sub 4, 4, 8
20983; PWR6-NEXT:    and 8, 3, 6
20984; PWR6-NEXT:    rotldi 3, 3, 62
20985; PWR6-NEXT:    and 3, 3, 6
20986; PWR6-NEXT:    lis 7, 3855
20987; PWR6-NEXT:    and 5, 4, 6
20988; PWR6-NEXT:    rotldi 4, 4, 62
20989; PWR6-NEXT:    add 3, 8, 3
20990; PWR6-NEXT:    lis 9, 257
20991; PWR6-NEXT:    ori 7, 7, 3855
20992; PWR6-NEXT:    and 4, 4, 6
20993; PWR6-NEXT:    rldicl 6, 3, 60, 4
20994; PWR6-NEXT:    ori 9, 9, 257
20995; PWR6-NEXT:    rldimi 7, 7, 32, 0
20996; PWR6-NEXT:    add 4, 5, 4
20997; PWR6-NEXT:    add 3, 3, 6
20998; PWR6-NEXT:    rldimi 9, 9, 32, 0
20999; PWR6-NEXT:    rldicl 5, 4, 60, 4
21000; PWR6-NEXT:    and 3, 3, 7
21001; PWR6-NEXT:    add 4, 4, 5
21002; PWR6-NEXT:    mulld 3, 3, 9
21003; PWR6-NEXT:    and 4, 4, 7
21004; PWR6-NEXT:    rldicl 3, 3, 8, 56
21005; PWR6-NEXT:    mulld 4, 4, 9
21006; PWR6-NEXT:    li 5, 35
21007; PWR6-NEXT:    subfic 3, 3, 35
21008; PWR6-NEXT:    rldicl 4, 4, 8, 56
21009; PWR6-NEXT:    subfe 3, 5, 5
21010; PWR6-NEXT:    subfic 4, 4, 35
21011; PWR6-NEXT:    subfe 4, 5, 5
21012; PWR6-NEXT:    blr
21013;
21014; PWR7-LABEL: ugt_35_v2i64:
21015; PWR7:       # %bb.0:
21016; PWR7-NEXT:    addi 3, 1, -32
21017; PWR7-NEXT:    li 5, 0
21018; PWR7-NEXT:    li 6, -1
21019; PWR7-NEXT:    stxvd2x 34, 0, 3
21020; PWR7-NEXT:    ld 3, -24(1)
21021; PWR7-NEXT:    ld 4, -32(1)
21022; PWR7-NEXT:    popcntd 3, 3
21023; PWR7-NEXT:    popcntd 4, 4
21024; PWR7-NEXT:    cmpldi 3, 35
21025; PWR7-NEXT:    iselgt 3, 6, 5
21026; PWR7-NEXT:    cmpldi 4, 35
21027; PWR7-NEXT:    iselgt 4, 6, 5
21028; PWR7-NEXT:    std 3, -8(1)
21029; PWR7-NEXT:    addi 3, 1, -16
21030; PWR7-NEXT:    std 4, -16(1)
21031; PWR7-NEXT:    lxvd2x 34, 0, 3
21032; PWR7-NEXT:    blr
21033;
21034; PWR8-LABEL: ugt_35_v2i64:
21035; PWR8:       # %bb.0:
21036; PWR8-NEXT:    addis 3, 2, .LCPI168_0@toc@ha
21037; PWR8-NEXT:    vpopcntd 2, 2
21038; PWR8-NEXT:    addi 3, 3, .LCPI168_0@toc@l
21039; PWR8-NEXT:    lxvd2x 35, 0, 3
21040; PWR8-NEXT:    vcmpgtud 2, 2, 3
21041; PWR8-NEXT:    blr
21042;
21043; PWR9-LABEL: ugt_35_v2i64:
21044; PWR9:       # %bb.0:
21045; PWR9-NEXT:    addis 3, 2, .LCPI168_0@toc@ha
21046; PWR9-NEXT:    vpopcntd 2, 2
21047; PWR9-NEXT:    addi 3, 3, .LCPI168_0@toc@l
21048; PWR9-NEXT:    lxvx 35, 0, 3
21049; PWR9-NEXT:    vcmpgtud 2, 2, 3
21050; PWR9-NEXT:    blr
21051  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21052  %3 = icmp ugt <2 x i64> %2, <i64 35, i64 35>
21053  %4 = sext <2 x i1> %3 to <2 x i64>
21054  ret <2 x i64> %4
21055}
21056
21057define <2 x i64> @ult_36_v2i64(<2 x i64> %0) {
21058; PWR5-LABEL: ult_36_v2i64:
21059; PWR5:       # %bb.0:
21060; PWR5-NEXT:    lis 5, 21845
21061; PWR5-NEXT:    lis 6, 13107
21062; PWR5-NEXT:    ori 5, 5, 21845
21063; PWR5-NEXT:    rotldi 8, 4, 63
21064; PWR5-NEXT:    rotldi 9, 3, 63
21065; PWR5-NEXT:    rldimi 5, 5, 32, 0
21066; PWR5-NEXT:    and 8, 8, 5
21067; PWR5-NEXT:    and 5, 9, 5
21068; PWR5-NEXT:    ori 6, 6, 13107
21069; PWR5-NEXT:    sub 3, 3, 5
21070; PWR5-NEXT:    rldimi 6, 6, 32, 0
21071; PWR5-NEXT:    sub 4, 4, 8
21072; PWR5-NEXT:    and 8, 3, 6
21073; PWR5-NEXT:    rotldi 3, 3, 62
21074; PWR5-NEXT:    and 3, 3, 6
21075; PWR5-NEXT:    lis 7, 3855
21076; PWR5-NEXT:    and 5, 4, 6
21077; PWR5-NEXT:    rotldi 4, 4, 62
21078; PWR5-NEXT:    add 3, 8, 3
21079; PWR5-NEXT:    lis 9, 257
21080; PWR5-NEXT:    ori 7, 7, 3855
21081; PWR5-NEXT:    and 4, 4, 6
21082; PWR5-NEXT:    rldicl 6, 3, 60, 4
21083; PWR5-NEXT:    ori 9, 9, 257
21084; PWR5-NEXT:    rldimi 7, 7, 32, 0
21085; PWR5-NEXT:    add 4, 5, 4
21086; PWR5-NEXT:    add 3, 3, 6
21087; PWR5-NEXT:    rldimi 9, 9, 32, 0
21088; PWR5-NEXT:    rldicl 5, 4, 60, 4
21089; PWR5-NEXT:    and 3, 3, 7
21090; PWR5-NEXT:    add 4, 4, 5
21091; PWR5-NEXT:    mulld 3, 3, 9
21092; PWR5-NEXT:    and 4, 4, 7
21093; PWR5-NEXT:    rldicl 3, 3, 8, 56
21094; PWR5-NEXT:    li 5, 36
21095; PWR5-NEXT:    mulld 4, 4, 9
21096; PWR5-NEXT:    subc 6, 3, 5
21097; PWR5-NEXT:    rldicl 4, 4, 8, 56
21098; PWR5-NEXT:    subfe 3, 3, 3
21099; PWR5-NEXT:    subc 5, 4, 5
21100; PWR5-NEXT:    subfe 4, 4, 4
21101; PWR5-NEXT:    blr
21102;
21103; PWR6-LABEL: ult_36_v2i64:
21104; PWR6:       # %bb.0:
21105; PWR6-NEXT:    lis 5, 21845
21106; PWR6-NEXT:    lis 6, 13107
21107; PWR6-NEXT:    ori 5, 5, 21845
21108; PWR6-NEXT:    rotldi 8, 4, 63
21109; PWR6-NEXT:    rotldi 9, 3, 63
21110; PWR6-NEXT:    rldimi 5, 5, 32, 0
21111; PWR6-NEXT:    and 8, 8, 5
21112; PWR6-NEXT:    and 5, 9, 5
21113; PWR6-NEXT:    ori 6, 6, 13107
21114; PWR6-NEXT:    sub 3, 3, 5
21115; PWR6-NEXT:    rldimi 6, 6, 32, 0
21116; PWR6-NEXT:    sub 4, 4, 8
21117; PWR6-NEXT:    and 8, 3, 6
21118; PWR6-NEXT:    rotldi 3, 3, 62
21119; PWR6-NEXT:    and 3, 3, 6
21120; PWR6-NEXT:    lis 7, 3855
21121; PWR6-NEXT:    and 5, 4, 6
21122; PWR6-NEXT:    rotldi 4, 4, 62
21123; PWR6-NEXT:    add 3, 8, 3
21124; PWR6-NEXT:    lis 9, 257
21125; PWR6-NEXT:    ori 7, 7, 3855
21126; PWR6-NEXT:    and 4, 4, 6
21127; PWR6-NEXT:    rldicl 6, 3, 60, 4
21128; PWR6-NEXT:    ori 9, 9, 257
21129; PWR6-NEXT:    rldimi 7, 7, 32, 0
21130; PWR6-NEXT:    add 4, 5, 4
21131; PWR6-NEXT:    add 3, 3, 6
21132; PWR6-NEXT:    rldimi 9, 9, 32, 0
21133; PWR6-NEXT:    rldicl 5, 4, 60, 4
21134; PWR6-NEXT:    and 3, 3, 7
21135; PWR6-NEXT:    add 4, 4, 5
21136; PWR6-NEXT:    mulld 3, 3, 9
21137; PWR6-NEXT:    and 4, 4, 7
21138; PWR6-NEXT:    rldicl 3, 3, 8, 56
21139; PWR6-NEXT:    li 5, 36
21140; PWR6-NEXT:    mulld 4, 4, 9
21141; PWR6-NEXT:    subc 6, 3, 5
21142; PWR6-NEXT:    rldicl 4, 4, 8, 56
21143; PWR6-NEXT:    subfe 3, 3, 3
21144; PWR6-NEXT:    subc 5, 4, 5
21145; PWR6-NEXT:    subfe 4, 4, 4
21146; PWR6-NEXT:    blr
21147;
21148; PWR7-LABEL: ult_36_v2i64:
21149; PWR7:       # %bb.0:
21150; PWR7-NEXT:    addi 3, 1, -32
21151; PWR7-NEXT:    li 5, 0
21152; PWR7-NEXT:    li 6, -1
21153; PWR7-NEXT:    stxvd2x 34, 0, 3
21154; PWR7-NEXT:    ld 3, -24(1)
21155; PWR7-NEXT:    ld 4, -32(1)
21156; PWR7-NEXT:    popcntd 3, 3
21157; PWR7-NEXT:    popcntd 4, 4
21158; PWR7-NEXT:    cmpldi 3, 36
21159; PWR7-NEXT:    isellt 3, 6, 5
21160; PWR7-NEXT:    cmpldi 4, 36
21161; PWR7-NEXT:    isellt 4, 6, 5
21162; PWR7-NEXT:    std 3, -8(1)
21163; PWR7-NEXT:    addi 3, 1, -16
21164; PWR7-NEXT:    std 4, -16(1)
21165; PWR7-NEXT:    lxvd2x 34, 0, 3
21166; PWR7-NEXT:    blr
21167;
21168; PWR8-LABEL: ult_36_v2i64:
21169; PWR8:       # %bb.0:
21170; PWR8-NEXT:    addis 3, 2, .LCPI169_0@toc@ha
21171; PWR8-NEXT:    vpopcntd 2, 2
21172; PWR8-NEXT:    addi 3, 3, .LCPI169_0@toc@l
21173; PWR8-NEXT:    lxvd2x 35, 0, 3
21174; PWR8-NEXT:    vcmpgtud 2, 3, 2
21175; PWR8-NEXT:    blr
21176;
21177; PWR9-LABEL: ult_36_v2i64:
21178; PWR9:       # %bb.0:
21179; PWR9-NEXT:    addis 3, 2, .LCPI169_0@toc@ha
21180; PWR9-NEXT:    vpopcntd 2, 2
21181; PWR9-NEXT:    addi 3, 3, .LCPI169_0@toc@l
21182; PWR9-NEXT:    lxvx 35, 0, 3
21183; PWR9-NEXT:    vcmpgtud 2, 3, 2
21184; PWR9-NEXT:    blr
21185  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21186  %3 = icmp ult <2 x i64> %2, <i64 36, i64 36>
21187  %4 = sext <2 x i1> %3 to <2 x i64>
21188  ret <2 x i64> %4
21189}
21190
21191define <2 x i64> @ugt_36_v2i64(<2 x i64> %0) {
21192; PWR5-LABEL: ugt_36_v2i64:
21193; PWR5:       # %bb.0:
21194; PWR5-NEXT:    lis 5, 21845
21195; PWR5-NEXT:    lis 6, 13107
21196; PWR5-NEXT:    ori 5, 5, 21845
21197; PWR5-NEXT:    rotldi 8, 4, 63
21198; PWR5-NEXT:    rotldi 9, 3, 63
21199; PWR5-NEXT:    rldimi 5, 5, 32, 0
21200; PWR5-NEXT:    and 8, 8, 5
21201; PWR5-NEXT:    and 5, 9, 5
21202; PWR5-NEXT:    ori 6, 6, 13107
21203; PWR5-NEXT:    sub 3, 3, 5
21204; PWR5-NEXT:    rldimi 6, 6, 32, 0
21205; PWR5-NEXT:    sub 4, 4, 8
21206; PWR5-NEXT:    and 8, 3, 6
21207; PWR5-NEXT:    rotldi 3, 3, 62
21208; PWR5-NEXT:    and 3, 3, 6
21209; PWR5-NEXT:    lis 7, 3855
21210; PWR5-NEXT:    and 5, 4, 6
21211; PWR5-NEXT:    rotldi 4, 4, 62
21212; PWR5-NEXT:    add 3, 8, 3
21213; PWR5-NEXT:    lis 9, 257
21214; PWR5-NEXT:    ori 7, 7, 3855
21215; PWR5-NEXT:    and 4, 4, 6
21216; PWR5-NEXT:    rldicl 6, 3, 60, 4
21217; PWR5-NEXT:    ori 9, 9, 257
21218; PWR5-NEXT:    rldimi 7, 7, 32, 0
21219; PWR5-NEXT:    add 4, 5, 4
21220; PWR5-NEXT:    add 3, 3, 6
21221; PWR5-NEXT:    rldimi 9, 9, 32, 0
21222; PWR5-NEXT:    rldicl 5, 4, 60, 4
21223; PWR5-NEXT:    and 3, 3, 7
21224; PWR5-NEXT:    add 4, 4, 5
21225; PWR5-NEXT:    mulld 3, 3, 9
21226; PWR5-NEXT:    and 4, 4, 7
21227; PWR5-NEXT:    rldicl 3, 3, 8, 56
21228; PWR5-NEXT:    mulld 4, 4, 9
21229; PWR5-NEXT:    li 5, 36
21230; PWR5-NEXT:    subfic 3, 3, 36
21231; PWR5-NEXT:    rldicl 4, 4, 8, 56
21232; PWR5-NEXT:    subfe 3, 5, 5
21233; PWR5-NEXT:    subfic 4, 4, 36
21234; PWR5-NEXT:    subfe 4, 5, 5
21235; PWR5-NEXT:    blr
21236;
21237; PWR6-LABEL: ugt_36_v2i64:
21238; PWR6:       # %bb.0:
21239; PWR6-NEXT:    lis 5, 21845
21240; PWR6-NEXT:    lis 6, 13107
21241; PWR6-NEXT:    ori 5, 5, 21845
21242; PWR6-NEXT:    rotldi 8, 4, 63
21243; PWR6-NEXT:    rotldi 9, 3, 63
21244; PWR6-NEXT:    rldimi 5, 5, 32, 0
21245; PWR6-NEXT:    and 8, 8, 5
21246; PWR6-NEXT:    and 5, 9, 5
21247; PWR6-NEXT:    ori 6, 6, 13107
21248; PWR6-NEXT:    sub 3, 3, 5
21249; PWR6-NEXT:    rldimi 6, 6, 32, 0
21250; PWR6-NEXT:    sub 4, 4, 8
21251; PWR6-NEXT:    and 8, 3, 6
21252; PWR6-NEXT:    rotldi 3, 3, 62
21253; PWR6-NEXT:    and 3, 3, 6
21254; PWR6-NEXT:    lis 7, 3855
21255; PWR6-NEXT:    and 5, 4, 6
21256; PWR6-NEXT:    rotldi 4, 4, 62
21257; PWR6-NEXT:    add 3, 8, 3
21258; PWR6-NEXT:    lis 9, 257
21259; PWR6-NEXT:    ori 7, 7, 3855
21260; PWR6-NEXT:    and 4, 4, 6
21261; PWR6-NEXT:    rldicl 6, 3, 60, 4
21262; PWR6-NEXT:    ori 9, 9, 257
21263; PWR6-NEXT:    rldimi 7, 7, 32, 0
21264; PWR6-NEXT:    add 4, 5, 4
21265; PWR6-NEXT:    add 3, 3, 6
21266; PWR6-NEXT:    rldimi 9, 9, 32, 0
21267; PWR6-NEXT:    rldicl 5, 4, 60, 4
21268; PWR6-NEXT:    and 3, 3, 7
21269; PWR6-NEXT:    add 4, 4, 5
21270; PWR6-NEXT:    mulld 3, 3, 9
21271; PWR6-NEXT:    and 4, 4, 7
21272; PWR6-NEXT:    rldicl 3, 3, 8, 56
21273; PWR6-NEXT:    mulld 4, 4, 9
21274; PWR6-NEXT:    li 5, 36
21275; PWR6-NEXT:    subfic 3, 3, 36
21276; PWR6-NEXT:    rldicl 4, 4, 8, 56
21277; PWR6-NEXT:    subfe 3, 5, 5
21278; PWR6-NEXT:    subfic 4, 4, 36
21279; PWR6-NEXT:    subfe 4, 5, 5
21280; PWR6-NEXT:    blr
21281;
21282; PWR7-LABEL: ugt_36_v2i64:
21283; PWR7:       # %bb.0:
21284; PWR7-NEXT:    addi 3, 1, -32
21285; PWR7-NEXT:    li 5, 0
21286; PWR7-NEXT:    li 6, -1
21287; PWR7-NEXT:    stxvd2x 34, 0, 3
21288; PWR7-NEXT:    ld 3, -24(1)
21289; PWR7-NEXT:    ld 4, -32(1)
21290; PWR7-NEXT:    popcntd 3, 3
21291; PWR7-NEXT:    popcntd 4, 4
21292; PWR7-NEXT:    cmpldi 3, 36
21293; PWR7-NEXT:    iselgt 3, 6, 5
21294; PWR7-NEXT:    cmpldi 4, 36
21295; PWR7-NEXT:    iselgt 4, 6, 5
21296; PWR7-NEXT:    std 3, -8(1)
21297; PWR7-NEXT:    addi 3, 1, -16
21298; PWR7-NEXT:    std 4, -16(1)
21299; PWR7-NEXT:    lxvd2x 34, 0, 3
21300; PWR7-NEXT:    blr
21301;
21302; PWR8-LABEL: ugt_36_v2i64:
21303; PWR8:       # %bb.0:
21304; PWR8-NEXT:    addis 3, 2, .LCPI170_0@toc@ha
21305; PWR8-NEXT:    vpopcntd 2, 2
21306; PWR8-NEXT:    addi 3, 3, .LCPI170_0@toc@l
21307; PWR8-NEXT:    lxvd2x 35, 0, 3
21308; PWR8-NEXT:    vcmpgtud 2, 2, 3
21309; PWR8-NEXT:    blr
21310;
21311; PWR9-LABEL: ugt_36_v2i64:
21312; PWR9:       # %bb.0:
21313; PWR9-NEXT:    addis 3, 2, .LCPI170_0@toc@ha
21314; PWR9-NEXT:    vpopcntd 2, 2
21315; PWR9-NEXT:    addi 3, 3, .LCPI170_0@toc@l
21316; PWR9-NEXT:    lxvx 35, 0, 3
21317; PWR9-NEXT:    vcmpgtud 2, 2, 3
21318; PWR9-NEXT:    blr
21319  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21320  %3 = icmp ugt <2 x i64> %2, <i64 36, i64 36>
21321  %4 = sext <2 x i1> %3 to <2 x i64>
21322  ret <2 x i64> %4
21323}
21324
21325define <2 x i64> @ult_37_v2i64(<2 x i64> %0) {
21326; PWR5-LABEL: ult_37_v2i64:
21327; PWR5:       # %bb.0:
21328; PWR5-NEXT:    lis 5, 21845
21329; PWR5-NEXT:    lis 6, 13107
21330; PWR5-NEXT:    ori 5, 5, 21845
21331; PWR5-NEXT:    rotldi 8, 4, 63
21332; PWR5-NEXT:    rotldi 9, 3, 63
21333; PWR5-NEXT:    rldimi 5, 5, 32, 0
21334; PWR5-NEXT:    and 8, 8, 5
21335; PWR5-NEXT:    and 5, 9, 5
21336; PWR5-NEXT:    ori 6, 6, 13107
21337; PWR5-NEXT:    sub 3, 3, 5
21338; PWR5-NEXT:    rldimi 6, 6, 32, 0
21339; PWR5-NEXT:    sub 4, 4, 8
21340; PWR5-NEXT:    and 8, 3, 6
21341; PWR5-NEXT:    rotldi 3, 3, 62
21342; PWR5-NEXT:    and 3, 3, 6
21343; PWR5-NEXT:    lis 7, 3855
21344; PWR5-NEXT:    and 5, 4, 6
21345; PWR5-NEXT:    rotldi 4, 4, 62
21346; PWR5-NEXT:    add 3, 8, 3
21347; PWR5-NEXT:    lis 9, 257
21348; PWR5-NEXT:    ori 7, 7, 3855
21349; PWR5-NEXT:    and 4, 4, 6
21350; PWR5-NEXT:    rldicl 6, 3, 60, 4
21351; PWR5-NEXT:    ori 9, 9, 257
21352; PWR5-NEXT:    rldimi 7, 7, 32, 0
21353; PWR5-NEXT:    add 4, 5, 4
21354; PWR5-NEXT:    add 3, 3, 6
21355; PWR5-NEXT:    rldimi 9, 9, 32, 0
21356; PWR5-NEXT:    rldicl 5, 4, 60, 4
21357; PWR5-NEXT:    and 3, 3, 7
21358; PWR5-NEXT:    add 4, 4, 5
21359; PWR5-NEXT:    mulld 3, 3, 9
21360; PWR5-NEXT:    and 4, 4, 7
21361; PWR5-NEXT:    rldicl 3, 3, 8, 56
21362; PWR5-NEXT:    li 5, 37
21363; PWR5-NEXT:    mulld 4, 4, 9
21364; PWR5-NEXT:    subc 6, 3, 5
21365; PWR5-NEXT:    rldicl 4, 4, 8, 56
21366; PWR5-NEXT:    subfe 3, 3, 3
21367; PWR5-NEXT:    subc 5, 4, 5
21368; PWR5-NEXT:    subfe 4, 4, 4
21369; PWR5-NEXT:    blr
21370;
21371; PWR6-LABEL: ult_37_v2i64:
21372; PWR6:       # %bb.0:
21373; PWR6-NEXT:    lis 5, 21845
21374; PWR6-NEXT:    lis 6, 13107
21375; PWR6-NEXT:    ori 5, 5, 21845
21376; PWR6-NEXT:    rotldi 8, 4, 63
21377; PWR6-NEXT:    rotldi 9, 3, 63
21378; PWR6-NEXT:    rldimi 5, 5, 32, 0
21379; PWR6-NEXT:    and 8, 8, 5
21380; PWR6-NEXT:    and 5, 9, 5
21381; PWR6-NEXT:    ori 6, 6, 13107
21382; PWR6-NEXT:    sub 3, 3, 5
21383; PWR6-NEXT:    rldimi 6, 6, 32, 0
21384; PWR6-NEXT:    sub 4, 4, 8
21385; PWR6-NEXT:    and 8, 3, 6
21386; PWR6-NEXT:    rotldi 3, 3, 62
21387; PWR6-NEXT:    and 3, 3, 6
21388; PWR6-NEXT:    lis 7, 3855
21389; PWR6-NEXT:    and 5, 4, 6
21390; PWR6-NEXT:    rotldi 4, 4, 62
21391; PWR6-NEXT:    add 3, 8, 3
21392; PWR6-NEXT:    lis 9, 257
21393; PWR6-NEXT:    ori 7, 7, 3855
21394; PWR6-NEXT:    and 4, 4, 6
21395; PWR6-NEXT:    rldicl 6, 3, 60, 4
21396; PWR6-NEXT:    ori 9, 9, 257
21397; PWR6-NEXT:    rldimi 7, 7, 32, 0
21398; PWR6-NEXT:    add 4, 5, 4
21399; PWR6-NEXT:    add 3, 3, 6
21400; PWR6-NEXT:    rldimi 9, 9, 32, 0
21401; PWR6-NEXT:    rldicl 5, 4, 60, 4
21402; PWR6-NEXT:    and 3, 3, 7
21403; PWR6-NEXT:    add 4, 4, 5
21404; PWR6-NEXT:    mulld 3, 3, 9
21405; PWR6-NEXT:    and 4, 4, 7
21406; PWR6-NEXT:    rldicl 3, 3, 8, 56
21407; PWR6-NEXT:    li 5, 37
21408; PWR6-NEXT:    mulld 4, 4, 9
21409; PWR6-NEXT:    subc 6, 3, 5
21410; PWR6-NEXT:    rldicl 4, 4, 8, 56
21411; PWR6-NEXT:    subfe 3, 3, 3
21412; PWR6-NEXT:    subc 5, 4, 5
21413; PWR6-NEXT:    subfe 4, 4, 4
21414; PWR6-NEXT:    blr
21415;
21416; PWR7-LABEL: ult_37_v2i64:
21417; PWR7:       # %bb.0:
21418; PWR7-NEXT:    addi 3, 1, -32
21419; PWR7-NEXT:    li 5, 0
21420; PWR7-NEXT:    li 6, -1
21421; PWR7-NEXT:    stxvd2x 34, 0, 3
21422; PWR7-NEXT:    ld 3, -24(1)
21423; PWR7-NEXT:    ld 4, -32(1)
21424; PWR7-NEXT:    popcntd 3, 3
21425; PWR7-NEXT:    popcntd 4, 4
21426; PWR7-NEXT:    cmpldi 3, 37
21427; PWR7-NEXT:    isellt 3, 6, 5
21428; PWR7-NEXT:    cmpldi 4, 37
21429; PWR7-NEXT:    isellt 4, 6, 5
21430; PWR7-NEXT:    std 3, -8(1)
21431; PWR7-NEXT:    addi 3, 1, -16
21432; PWR7-NEXT:    std 4, -16(1)
21433; PWR7-NEXT:    lxvd2x 34, 0, 3
21434; PWR7-NEXT:    blr
21435;
21436; PWR8-LABEL: ult_37_v2i64:
21437; PWR8:       # %bb.0:
21438; PWR8-NEXT:    addis 3, 2, .LCPI171_0@toc@ha
21439; PWR8-NEXT:    vpopcntd 2, 2
21440; PWR8-NEXT:    addi 3, 3, .LCPI171_0@toc@l
21441; PWR8-NEXT:    lxvd2x 35, 0, 3
21442; PWR8-NEXT:    vcmpgtud 2, 3, 2
21443; PWR8-NEXT:    blr
21444;
21445; PWR9-LABEL: ult_37_v2i64:
21446; PWR9:       # %bb.0:
21447; PWR9-NEXT:    addis 3, 2, .LCPI171_0@toc@ha
21448; PWR9-NEXT:    vpopcntd 2, 2
21449; PWR9-NEXT:    addi 3, 3, .LCPI171_0@toc@l
21450; PWR9-NEXT:    lxvx 35, 0, 3
21451; PWR9-NEXT:    vcmpgtud 2, 3, 2
21452; PWR9-NEXT:    blr
21453  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21454  %3 = icmp ult <2 x i64> %2, <i64 37, i64 37>
21455  %4 = sext <2 x i1> %3 to <2 x i64>
21456  ret <2 x i64> %4
21457}
21458
21459define <2 x i64> @ugt_37_v2i64(<2 x i64> %0) {
21460; PWR5-LABEL: ugt_37_v2i64:
21461; PWR5:       # %bb.0:
21462; PWR5-NEXT:    lis 5, 21845
21463; PWR5-NEXT:    lis 6, 13107
21464; PWR5-NEXT:    ori 5, 5, 21845
21465; PWR5-NEXT:    rotldi 8, 4, 63
21466; PWR5-NEXT:    rotldi 9, 3, 63
21467; PWR5-NEXT:    rldimi 5, 5, 32, 0
21468; PWR5-NEXT:    and 8, 8, 5
21469; PWR5-NEXT:    and 5, 9, 5
21470; PWR5-NEXT:    ori 6, 6, 13107
21471; PWR5-NEXT:    sub 3, 3, 5
21472; PWR5-NEXT:    rldimi 6, 6, 32, 0
21473; PWR5-NEXT:    sub 4, 4, 8
21474; PWR5-NEXT:    and 8, 3, 6
21475; PWR5-NEXT:    rotldi 3, 3, 62
21476; PWR5-NEXT:    and 3, 3, 6
21477; PWR5-NEXT:    lis 7, 3855
21478; PWR5-NEXT:    and 5, 4, 6
21479; PWR5-NEXT:    rotldi 4, 4, 62
21480; PWR5-NEXT:    add 3, 8, 3
21481; PWR5-NEXT:    lis 9, 257
21482; PWR5-NEXT:    ori 7, 7, 3855
21483; PWR5-NEXT:    and 4, 4, 6
21484; PWR5-NEXT:    rldicl 6, 3, 60, 4
21485; PWR5-NEXT:    ori 9, 9, 257
21486; PWR5-NEXT:    rldimi 7, 7, 32, 0
21487; PWR5-NEXT:    add 4, 5, 4
21488; PWR5-NEXT:    add 3, 3, 6
21489; PWR5-NEXT:    rldimi 9, 9, 32, 0
21490; PWR5-NEXT:    rldicl 5, 4, 60, 4
21491; PWR5-NEXT:    and 3, 3, 7
21492; PWR5-NEXT:    add 4, 4, 5
21493; PWR5-NEXT:    mulld 3, 3, 9
21494; PWR5-NEXT:    and 4, 4, 7
21495; PWR5-NEXT:    rldicl 3, 3, 8, 56
21496; PWR5-NEXT:    mulld 4, 4, 9
21497; PWR5-NEXT:    li 5, 37
21498; PWR5-NEXT:    subfic 3, 3, 37
21499; PWR5-NEXT:    rldicl 4, 4, 8, 56
21500; PWR5-NEXT:    subfe 3, 5, 5
21501; PWR5-NEXT:    subfic 4, 4, 37
21502; PWR5-NEXT:    subfe 4, 5, 5
21503; PWR5-NEXT:    blr
21504;
21505; PWR6-LABEL: ugt_37_v2i64:
21506; PWR6:       # %bb.0:
21507; PWR6-NEXT:    lis 5, 21845
21508; PWR6-NEXT:    lis 6, 13107
21509; PWR6-NEXT:    ori 5, 5, 21845
21510; PWR6-NEXT:    rotldi 8, 4, 63
21511; PWR6-NEXT:    rotldi 9, 3, 63
21512; PWR6-NEXT:    rldimi 5, 5, 32, 0
21513; PWR6-NEXT:    and 8, 8, 5
21514; PWR6-NEXT:    and 5, 9, 5
21515; PWR6-NEXT:    ori 6, 6, 13107
21516; PWR6-NEXT:    sub 3, 3, 5
21517; PWR6-NEXT:    rldimi 6, 6, 32, 0
21518; PWR6-NEXT:    sub 4, 4, 8
21519; PWR6-NEXT:    and 8, 3, 6
21520; PWR6-NEXT:    rotldi 3, 3, 62
21521; PWR6-NEXT:    and 3, 3, 6
21522; PWR6-NEXT:    lis 7, 3855
21523; PWR6-NEXT:    and 5, 4, 6
21524; PWR6-NEXT:    rotldi 4, 4, 62
21525; PWR6-NEXT:    add 3, 8, 3
21526; PWR6-NEXT:    lis 9, 257
21527; PWR6-NEXT:    ori 7, 7, 3855
21528; PWR6-NEXT:    and 4, 4, 6
21529; PWR6-NEXT:    rldicl 6, 3, 60, 4
21530; PWR6-NEXT:    ori 9, 9, 257
21531; PWR6-NEXT:    rldimi 7, 7, 32, 0
21532; PWR6-NEXT:    add 4, 5, 4
21533; PWR6-NEXT:    add 3, 3, 6
21534; PWR6-NEXT:    rldimi 9, 9, 32, 0
21535; PWR6-NEXT:    rldicl 5, 4, 60, 4
21536; PWR6-NEXT:    and 3, 3, 7
21537; PWR6-NEXT:    add 4, 4, 5
21538; PWR6-NEXT:    mulld 3, 3, 9
21539; PWR6-NEXT:    and 4, 4, 7
21540; PWR6-NEXT:    rldicl 3, 3, 8, 56
21541; PWR6-NEXT:    mulld 4, 4, 9
21542; PWR6-NEXT:    li 5, 37
21543; PWR6-NEXT:    subfic 3, 3, 37
21544; PWR6-NEXT:    rldicl 4, 4, 8, 56
21545; PWR6-NEXT:    subfe 3, 5, 5
21546; PWR6-NEXT:    subfic 4, 4, 37
21547; PWR6-NEXT:    subfe 4, 5, 5
21548; PWR6-NEXT:    blr
21549;
21550; PWR7-LABEL: ugt_37_v2i64:
21551; PWR7:       # %bb.0:
21552; PWR7-NEXT:    addi 3, 1, -32
21553; PWR7-NEXT:    li 5, 0
21554; PWR7-NEXT:    li 6, -1
21555; PWR7-NEXT:    stxvd2x 34, 0, 3
21556; PWR7-NEXT:    ld 3, -24(1)
21557; PWR7-NEXT:    ld 4, -32(1)
21558; PWR7-NEXT:    popcntd 3, 3
21559; PWR7-NEXT:    popcntd 4, 4
21560; PWR7-NEXT:    cmpldi 3, 37
21561; PWR7-NEXT:    iselgt 3, 6, 5
21562; PWR7-NEXT:    cmpldi 4, 37
21563; PWR7-NEXT:    iselgt 4, 6, 5
21564; PWR7-NEXT:    std 3, -8(1)
21565; PWR7-NEXT:    addi 3, 1, -16
21566; PWR7-NEXT:    std 4, -16(1)
21567; PWR7-NEXT:    lxvd2x 34, 0, 3
21568; PWR7-NEXT:    blr
21569;
21570; PWR8-LABEL: ugt_37_v2i64:
21571; PWR8:       # %bb.0:
21572; PWR8-NEXT:    addis 3, 2, .LCPI172_0@toc@ha
21573; PWR8-NEXT:    vpopcntd 2, 2
21574; PWR8-NEXT:    addi 3, 3, .LCPI172_0@toc@l
21575; PWR8-NEXT:    lxvd2x 35, 0, 3
21576; PWR8-NEXT:    vcmpgtud 2, 2, 3
21577; PWR8-NEXT:    blr
21578;
21579; PWR9-LABEL: ugt_37_v2i64:
21580; PWR9:       # %bb.0:
21581; PWR9-NEXT:    addis 3, 2, .LCPI172_0@toc@ha
21582; PWR9-NEXT:    vpopcntd 2, 2
21583; PWR9-NEXT:    addi 3, 3, .LCPI172_0@toc@l
21584; PWR9-NEXT:    lxvx 35, 0, 3
21585; PWR9-NEXT:    vcmpgtud 2, 2, 3
21586; PWR9-NEXT:    blr
21587  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21588  %3 = icmp ugt <2 x i64> %2, <i64 37, i64 37>
21589  %4 = sext <2 x i1> %3 to <2 x i64>
21590  ret <2 x i64> %4
21591}
21592
21593define <2 x i64> @ult_38_v2i64(<2 x i64> %0) {
21594; PWR5-LABEL: ult_38_v2i64:
21595; PWR5:       # %bb.0:
21596; PWR5-NEXT:    lis 5, 21845
21597; PWR5-NEXT:    lis 6, 13107
21598; PWR5-NEXT:    ori 5, 5, 21845
21599; PWR5-NEXT:    rotldi 8, 4, 63
21600; PWR5-NEXT:    rotldi 9, 3, 63
21601; PWR5-NEXT:    rldimi 5, 5, 32, 0
21602; PWR5-NEXT:    and 8, 8, 5
21603; PWR5-NEXT:    and 5, 9, 5
21604; PWR5-NEXT:    ori 6, 6, 13107
21605; PWR5-NEXT:    sub 3, 3, 5
21606; PWR5-NEXT:    rldimi 6, 6, 32, 0
21607; PWR5-NEXT:    sub 4, 4, 8
21608; PWR5-NEXT:    and 8, 3, 6
21609; PWR5-NEXT:    rotldi 3, 3, 62
21610; PWR5-NEXT:    and 3, 3, 6
21611; PWR5-NEXT:    lis 7, 3855
21612; PWR5-NEXT:    and 5, 4, 6
21613; PWR5-NEXT:    rotldi 4, 4, 62
21614; PWR5-NEXT:    add 3, 8, 3
21615; PWR5-NEXT:    lis 9, 257
21616; PWR5-NEXT:    ori 7, 7, 3855
21617; PWR5-NEXT:    and 4, 4, 6
21618; PWR5-NEXT:    rldicl 6, 3, 60, 4
21619; PWR5-NEXT:    ori 9, 9, 257
21620; PWR5-NEXT:    rldimi 7, 7, 32, 0
21621; PWR5-NEXT:    add 4, 5, 4
21622; PWR5-NEXT:    add 3, 3, 6
21623; PWR5-NEXT:    rldimi 9, 9, 32, 0
21624; PWR5-NEXT:    rldicl 5, 4, 60, 4
21625; PWR5-NEXT:    and 3, 3, 7
21626; PWR5-NEXT:    add 4, 4, 5
21627; PWR5-NEXT:    mulld 3, 3, 9
21628; PWR5-NEXT:    and 4, 4, 7
21629; PWR5-NEXT:    rldicl 3, 3, 8, 56
21630; PWR5-NEXT:    li 5, 38
21631; PWR5-NEXT:    mulld 4, 4, 9
21632; PWR5-NEXT:    subc 6, 3, 5
21633; PWR5-NEXT:    rldicl 4, 4, 8, 56
21634; PWR5-NEXT:    subfe 3, 3, 3
21635; PWR5-NEXT:    subc 5, 4, 5
21636; PWR5-NEXT:    subfe 4, 4, 4
21637; PWR5-NEXT:    blr
21638;
21639; PWR6-LABEL: ult_38_v2i64:
21640; PWR6:       # %bb.0:
21641; PWR6-NEXT:    lis 5, 21845
21642; PWR6-NEXT:    lis 6, 13107
21643; PWR6-NEXT:    ori 5, 5, 21845
21644; PWR6-NEXT:    rotldi 8, 4, 63
21645; PWR6-NEXT:    rotldi 9, 3, 63
21646; PWR6-NEXT:    rldimi 5, 5, 32, 0
21647; PWR6-NEXT:    and 8, 8, 5
21648; PWR6-NEXT:    and 5, 9, 5
21649; PWR6-NEXT:    ori 6, 6, 13107
21650; PWR6-NEXT:    sub 3, 3, 5
21651; PWR6-NEXT:    rldimi 6, 6, 32, 0
21652; PWR6-NEXT:    sub 4, 4, 8
21653; PWR6-NEXT:    and 8, 3, 6
21654; PWR6-NEXT:    rotldi 3, 3, 62
21655; PWR6-NEXT:    and 3, 3, 6
21656; PWR6-NEXT:    lis 7, 3855
21657; PWR6-NEXT:    and 5, 4, 6
21658; PWR6-NEXT:    rotldi 4, 4, 62
21659; PWR6-NEXT:    add 3, 8, 3
21660; PWR6-NEXT:    lis 9, 257
21661; PWR6-NEXT:    ori 7, 7, 3855
21662; PWR6-NEXT:    and 4, 4, 6
21663; PWR6-NEXT:    rldicl 6, 3, 60, 4
21664; PWR6-NEXT:    ori 9, 9, 257
21665; PWR6-NEXT:    rldimi 7, 7, 32, 0
21666; PWR6-NEXT:    add 4, 5, 4
21667; PWR6-NEXT:    add 3, 3, 6
21668; PWR6-NEXT:    rldimi 9, 9, 32, 0
21669; PWR6-NEXT:    rldicl 5, 4, 60, 4
21670; PWR6-NEXT:    and 3, 3, 7
21671; PWR6-NEXT:    add 4, 4, 5
21672; PWR6-NEXT:    mulld 3, 3, 9
21673; PWR6-NEXT:    and 4, 4, 7
21674; PWR6-NEXT:    rldicl 3, 3, 8, 56
21675; PWR6-NEXT:    li 5, 38
21676; PWR6-NEXT:    mulld 4, 4, 9
21677; PWR6-NEXT:    subc 6, 3, 5
21678; PWR6-NEXT:    rldicl 4, 4, 8, 56
21679; PWR6-NEXT:    subfe 3, 3, 3
21680; PWR6-NEXT:    subc 5, 4, 5
21681; PWR6-NEXT:    subfe 4, 4, 4
21682; PWR6-NEXT:    blr
21683;
21684; PWR7-LABEL: ult_38_v2i64:
21685; PWR7:       # %bb.0:
21686; PWR7-NEXT:    addi 3, 1, -32
21687; PWR7-NEXT:    li 5, 0
21688; PWR7-NEXT:    li 6, -1
21689; PWR7-NEXT:    stxvd2x 34, 0, 3
21690; PWR7-NEXT:    ld 3, -24(1)
21691; PWR7-NEXT:    ld 4, -32(1)
21692; PWR7-NEXT:    popcntd 3, 3
21693; PWR7-NEXT:    popcntd 4, 4
21694; PWR7-NEXT:    cmpldi 3, 38
21695; PWR7-NEXT:    isellt 3, 6, 5
21696; PWR7-NEXT:    cmpldi 4, 38
21697; PWR7-NEXT:    isellt 4, 6, 5
21698; PWR7-NEXT:    std 3, -8(1)
21699; PWR7-NEXT:    addi 3, 1, -16
21700; PWR7-NEXT:    std 4, -16(1)
21701; PWR7-NEXT:    lxvd2x 34, 0, 3
21702; PWR7-NEXT:    blr
21703;
21704; PWR8-LABEL: ult_38_v2i64:
21705; PWR8:       # %bb.0:
21706; PWR8-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
21707; PWR8-NEXT:    vpopcntd 2, 2
21708; PWR8-NEXT:    addi 3, 3, .LCPI173_0@toc@l
21709; PWR8-NEXT:    lxvd2x 35, 0, 3
21710; PWR8-NEXT:    vcmpgtud 2, 3, 2
21711; PWR8-NEXT:    blr
21712;
21713; PWR9-LABEL: ult_38_v2i64:
21714; PWR9:       # %bb.0:
21715; PWR9-NEXT:    addis 3, 2, .LCPI173_0@toc@ha
21716; PWR9-NEXT:    vpopcntd 2, 2
21717; PWR9-NEXT:    addi 3, 3, .LCPI173_0@toc@l
21718; PWR9-NEXT:    lxvx 35, 0, 3
21719; PWR9-NEXT:    vcmpgtud 2, 3, 2
21720; PWR9-NEXT:    blr
21721  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21722  %3 = icmp ult <2 x i64> %2, <i64 38, i64 38>
21723  %4 = sext <2 x i1> %3 to <2 x i64>
21724  ret <2 x i64> %4
21725}
21726
21727define <2 x i64> @ugt_38_v2i64(<2 x i64> %0) {
21728; PWR5-LABEL: ugt_38_v2i64:
21729; PWR5:       # %bb.0:
21730; PWR5-NEXT:    lis 5, 21845
21731; PWR5-NEXT:    lis 6, 13107
21732; PWR5-NEXT:    ori 5, 5, 21845
21733; PWR5-NEXT:    rotldi 8, 4, 63
21734; PWR5-NEXT:    rotldi 9, 3, 63
21735; PWR5-NEXT:    rldimi 5, 5, 32, 0
21736; PWR5-NEXT:    and 8, 8, 5
21737; PWR5-NEXT:    and 5, 9, 5
21738; PWR5-NEXT:    ori 6, 6, 13107
21739; PWR5-NEXT:    sub 3, 3, 5
21740; PWR5-NEXT:    rldimi 6, 6, 32, 0
21741; PWR5-NEXT:    sub 4, 4, 8
21742; PWR5-NEXT:    and 8, 3, 6
21743; PWR5-NEXT:    rotldi 3, 3, 62
21744; PWR5-NEXT:    and 3, 3, 6
21745; PWR5-NEXT:    lis 7, 3855
21746; PWR5-NEXT:    and 5, 4, 6
21747; PWR5-NEXT:    rotldi 4, 4, 62
21748; PWR5-NEXT:    add 3, 8, 3
21749; PWR5-NEXT:    lis 9, 257
21750; PWR5-NEXT:    ori 7, 7, 3855
21751; PWR5-NEXT:    and 4, 4, 6
21752; PWR5-NEXT:    rldicl 6, 3, 60, 4
21753; PWR5-NEXT:    ori 9, 9, 257
21754; PWR5-NEXT:    rldimi 7, 7, 32, 0
21755; PWR5-NEXT:    add 4, 5, 4
21756; PWR5-NEXT:    add 3, 3, 6
21757; PWR5-NEXT:    rldimi 9, 9, 32, 0
21758; PWR5-NEXT:    rldicl 5, 4, 60, 4
21759; PWR5-NEXT:    and 3, 3, 7
21760; PWR5-NEXT:    add 4, 4, 5
21761; PWR5-NEXT:    mulld 3, 3, 9
21762; PWR5-NEXT:    and 4, 4, 7
21763; PWR5-NEXT:    rldicl 3, 3, 8, 56
21764; PWR5-NEXT:    mulld 4, 4, 9
21765; PWR5-NEXT:    li 5, 38
21766; PWR5-NEXT:    subfic 3, 3, 38
21767; PWR5-NEXT:    rldicl 4, 4, 8, 56
21768; PWR5-NEXT:    subfe 3, 5, 5
21769; PWR5-NEXT:    subfic 4, 4, 38
21770; PWR5-NEXT:    subfe 4, 5, 5
21771; PWR5-NEXT:    blr
21772;
21773; PWR6-LABEL: ugt_38_v2i64:
21774; PWR6:       # %bb.0:
21775; PWR6-NEXT:    lis 5, 21845
21776; PWR6-NEXT:    lis 6, 13107
21777; PWR6-NEXT:    ori 5, 5, 21845
21778; PWR6-NEXT:    rotldi 8, 4, 63
21779; PWR6-NEXT:    rotldi 9, 3, 63
21780; PWR6-NEXT:    rldimi 5, 5, 32, 0
21781; PWR6-NEXT:    and 8, 8, 5
21782; PWR6-NEXT:    and 5, 9, 5
21783; PWR6-NEXT:    ori 6, 6, 13107
21784; PWR6-NEXT:    sub 3, 3, 5
21785; PWR6-NEXT:    rldimi 6, 6, 32, 0
21786; PWR6-NEXT:    sub 4, 4, 8
21787; PWR6-NEXT:    and 8, 3, 6
21788; PWR6-NEXT:    rotldi 3, 3, 62
21789; PWR6-NEXT:    and 3, 3, 6
21790; PWR6-NEXT:    lis 7, 3855
21791; PWR6-NEXT:    and 5, 4, 6
21792; PWR6-NEXT:    rotldi 4, 4, 62
21793; PWR6-NEXT:    add 3, 8, 3
21794; PWR6-NEXT:    lis 9, 257
21795; PWR6-NEXT:    ori 7, 7, 3855
21796; PWR6-NEXT:    and 4, 4, 6
21797; PWR6-NEXT:    rldicl 6, 3, 60, 4
21798; PWR6-NEXT:    ori 9, 9, 257
21799; PWR6-NEXT:    rldimi 7, 7, 32, 0
21800; PWR6-NEXT:    add 4, 5, 4
21801; PWR6-NEXT:    add 3, 3, 6
21802; PWR6-NEXT:    rldimi 9, 9, 32, 0
21803; PWR6-NEXT:    rldicl 5, 4, 60, 4
21804; PWR6-NEXT:    and 3, 3, 7
21805; PWR6-NEXT:    add 4, 4, 5
21806; PWR6-NEXT:    mulld 3, 3, 9
21807; PWR6-NEXT:    and 4, 4, 7
21808; PWR6-NEXT:    rldicl 3, 3, 8, 56
21809; PWR6-NEXT:    mulld 4, 4, 9
21810; PWR6-NEXT:    li 5, 38
21811; PWR6-NEXT:    subfic 3, 3, 38
21812; PWR6-NEXT:    rldicl 4, 4, 8, 56
21813; PWR6-NEXT:    subfe 3, 5, 5
21814; PWR6-NEXT:    subfic 4, 4, 38
21815; PWR6-NEXT:    subfe 4, 5, 5
21816; PWR6-NEXT:    blr
21817;
21818; PWR7-LABEL: ugt_38_v2i64:
21819; PWR7:       # %bb.0:
21820; PWR7-NEXT:    addi 3, 1, -32
21821; PWR7-NEXT:    li 5, 0
21822; PWR7-NEXT:    li 6, -1
21823; PWR7-NEXT:    stxvd2x 34, 0, 3
21824; PWR7-NEXT:    ld 3, -24(1)
21825; PWR7-NEXT:    ld 4, -32(1)
21826; PWR7-NEXT:    popcntd 3, 3
21827; PWR7-NEXT:    popcntd 4, 4
21828; PWR7-NEXT:    cmpldi 3, 38
21829; PWR7-NEXT:    iselgt 3, 6, 5
21830; PWR7-NEXT:    cmpldi 4, 38
21831; PWR7-NEXT:    iselgt 4, 6, 5
21832; PWR7-NEXT:    std 3, -8(1)
21833; PWR7-NEXT:    addi 3, 1, -16
21834; PWR7-NEXT:    std 4, -16(1)
21835; PWR7-NEXT:    lxvd2x 34, 0, 3
21836; PWR7-NEXT:    blr
21837;
21838; PWR8-LABEL: ugt_38_v2i64:
21839; PWR8:       # %bb.0:
21840; PWR8-NEXT:    addis 3, 2, .LCPI174_0@toc@ha
21841; PWR8-NEXT:    vpopcntd 2, 2
21842; PWR8-NEXT:    addi 3, 3, .LCPI174_0@toc@l
21843; PWR8-NEXT:    lxvd2x 35, 0, 3
21844; PWR8-NEXT:    vcmpgtud 2, 2, 3
21845; PWR8-NEXT:    blr
21846;
21847; PWR9-LABEL: ugt_38_v2i64:
21848; PWR9:       # %bb.0:
21849; PWR9-NEXT:    addis 3, 2, .LCPI174_0@toc@ha
21850; PWR9-NEXT:    vpopcntd 2, 2
21851; PWR9-NEXT:    addi 3, 3, .LCPI174_0@toc@l
21852; PWR9-NEXT:    lxvx 35, 0, 3
21853; PWR9-NEXT:    vcmpgtud 2, 2, 3
21854; PWR9-NEXT:    blr
21855  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21856  %3 = icmp ugt <2 x i64> %2, <i64 38, i64 38>
21857  %4 = sext <2 x i1> %3 to <2 x i64>
21858  ret <2 x i64> %4
21859}
21860
21861define <2 x i64> @ult_39_v2i64(<2 x i64> %0) {
21862; PWR5-LABEL: ult_39_v2i64:
21863; PWR5:       # %bb.0:
21864; PWR5-NEXT:    lis 5, 21845
21865; PWR5-NEXT:    lis 6, 13107
21866; PWR5-NEXT:    ori 5, 5, 21845
21867; PWR5-NEXT:    rotldi 8, 4, 63
21868; PWR5-NEXT:    rotldi 9, 3, 63
21869; PWR5-NEXT:    rldimi 5, 5, 32, 0
21870; PWR5-NEXT:    and 8, 8, 5
21871; PWR5-NEXT:    and 5, 9, 5
21872; PWR5-NEXT:    ori 6, 6, 13107
21873; PWR5-NEXT:    sub 3, 3, 5
21874; PWR5-NEXT:    rldimi 6, 6, 32, 0
21875; PWR5-NEXT:    sub 4, 4, 8
21876; PWR5-NEXT:    and 8, 3, 6
21877; PWR5-NEXT:    rotldi 3, 3, 62
21878; PWR5-NEXT:    and 3, 3, 6
21879; PWR5-NEXT:    lis 7, 3855
21880; PWR5-NEXT:    and 5, 4, 6
21881; PWR5-NEXT:    rotldi 4, 4, 62
21882; PWR5-NEXT:    add 3, 8, 3
21883; PWR5-NEXT:    lis 9, 257
21884; PWR5-NEXT:    ori 7, 7, 3855
21885; PWR5-NEXT:    and 4, 4, 6
21886; PWR5-NEXT:    rldicl 6, 3, 60, 4
21887; PWR5-NEXT:    ori 9, 9, 257
21888; PWR5-NEXT:    rldimi 7, 7, 32, 0
21889; PWR5-NEXT:    add 4, 5, 4
21890; PWR5-NEXT:    add 3, 3, 6
21891; PWR5-NEXT:    rldimi 9, 9, 32, 0
21892; PWR5-NEXT:    rldicl 5, 4, 60, 4
21893; PWR5-NEXT:    and 3, 3, 7
21894; PWR5-NEXT:    add 4, 4, 5
21895; PWR5-NEXT:    mulld 3, 3, 9
21896; PWR5-NEXT:    and 4, 4, 7
21897; PWR5-NEXT:    rldicl 3, 3, 8, 56
21898; PWR5-NEXT:    li 5, 39
21899; PWR5-NEXT:    mulld 4, 4, 9
21900; PWR5-NEXT:    subc 6, 3, 5
21901; PWR5-NEXT:    rldicl 4, 4, 8, 56
21902; PWR5-NEXT:    subfe 3, 3, 3
21903; PWR5-NEXT:    subc 5, 4, 5
21904; PWR5-NEXT:    subfe 4, 4, 4
21905; PWR5-NEXT:    blr
21906;
21907; PWR6-LABEL: ult_39_v2i64:
21908; PWR6:       # %bb.0:
21909; PWR6-NEXT:    lis 5, 21845
21910; PWR6-NEXT:    lis 6, 13107
21911; PWR6-NEXT:    ori 5, 5, 21845
21912; PWR6-NEXT:    rotldi 8, 4, 63
21913; PWR6-NEXT:    rotldi 9, 3, 63
21914; PWR6-NEXT:    rldimi 5, 5, 32, 0
21915; PWR6-NEXT:    and 8, 8, 5
21916; PWR6-NEXT:    and 5, 9, 5
21917; PWR6-NEXT:    ori 6, 6, 13107
21918; PWR6-NEXT:    sub 3, 3, 5
21919; PWR6-NEXT:    rldimi 6, 6, 32, 0
21920; PWR6-NEXT:    sub 4, 4, 8
21921; PWR6-NEXT:    and 8, 3, 6
21922; PWR6-NEXT:    rotldi 3, 3, 62
21923; PWR6-NEXT:    and 3, 3, 6
21924; PWR6-NEXT:    lis 7, 3855
21925; PWR6-NEXT:    and 5, 4, 6
21926; PWR6-NEXT:    rotldi 4, 4, 62
21927; PWR6-NEXT:    add 3, 8, 3
21928; PWR6-NEXT:    lis 9, 257
21929; PWR6-NEXT:    ori 7, 7, 3855
21930; PWR6-NEXT:    and 4, 4, 6
21931; PWR6-NEXT:    rldicl 6, 3, 60, 4
21932; PWR6-NEXT:    ori 9, 9, 257
21933; PWR6-NEXT:    rldimi 7, 7, 32, 0
21934; PWR6-NEXT:    add 4, 5, 4
21935; PWR6-NEXT:    add 3, 3, 6
21936; PWR6-NEXT:    rldimi 9, 9, 32, 0
21937; PWR6-NEXT:    rldicl 5, 4, 60, 4
21938; PWR6-NEXT:    and 3, 3, 7
21939; PWR6-NEXT:    add 4, 4, 5
21940; PWR6-NEXT:    mulld 3, 3, 9
21941; PWR6-NEXT:    and 4, 4, 7
21942; PWR6-NEXT:    rldicl 3, 3, 8, 56
21943; PWR6-NEXT:    li 5, 39
21944; PWR6-NEXT:    mulld 4, 4, 9
21945; PWR6-NEXT:    subc 6, 3, 5
21946; PWR6-NEXT:    rldicl 4, 4, 8, 56
21947; PWR6-NEXT:    subfe 3, 3, 3
21948; PWR6-NEXT:    subc 5, 4, 5
21949; PWR6-NEXT:    subfe 4, 4, 4
21950; PWR6-NEXT:    blr
21951;
21952; PWR7-LABEL: ult_39_v2i64:
21953; PWR7:       # %bb.0:
21954; PWR7-NEXT:    addi 3, 1, -32
21955; PWR7-NEXT:    li 5, 0
21956; PWR7-NEXT:    li 6, -1
21957; PWR7-NEXT:    stxvd2x 34, 0, 3
21958; PWR7-NEXT:    ld 3, -24(1)
21959; PWR7-NEXT:    ld 4, -32(1)
21960; PWR7-NEXT:    popcntd 3, 3
21961; PWR7-NEXT:    popcntd 4, 4
21962; PWR7-NEXT:    cmpldi 3, 39
21963; PWR7-NEXT:    isellt 3, 6, 5
21964; PWR7-NEXT:    cmpldi 4, 39
21965; PWR7-NEXT:    isellt 4, 6, 5
21966; PWR7-NEXT:    std 3, -8(1)
21967; PWR7-NEXT:    addi 3, 1, -16
21968; PWR7-NEXT:    std 4, -16(1)
21969; PWR7-NEXT:    lxvd2x 34, 0, 3
21970; PWR7-NEXT:    blr
21971;
21972; PWR8-LABEL: ult_39_v2i64:
21973; PWR8:       # %bb.0:
21974; PWR8-NEXT:    addis 3, 2, .LCPI175_0@toc@ha
21975; PWR8-NEXT:    vpopcntd 2, 2
21976; PWR8-NEXT:    addi 3, 3, .LCPI175_0@toc@l
21977; PWR8-NEXT:    lxvd2x 35, 0, 3
21978; PWR8-NEXT:    vcmpgtud 2, 3, 2
21979; PWR8-NEXT:    blr
21980;
21981; PWR9-LABEL: ult_39_v2i64:
21982; PWR9:       # %bb.0:
21983; PWR9-NEXT:    addis 3, 2, .LCPI175_0@toc@ha
21984; PWR9-NEXT:    vpopcntd 2, 2
21985; PWR9-NEXT:    addi 3, 3, .LCPI175_0@toc@l
21986; PWR9-NEXT:    lxvx 35, 0, 3
21987; PWR9-NEXT:    vcmpgtud 2, 3, 2
21988; PWR9-NEXT:    blr
21989  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
21990  %3 = icmp ult <2 x i64> %2, <i64 39, i64 39>
21991  %4 = sext <2 x i1> %3 to <2 x i64>
21992  ret <2 x i64> %4
21993}
21994
21995define <2 x i64> @ugt_39_v2i64(<2 x i64> %0) {
21996; PWR5-LABEL: ugt_39_v2i64:
21997; PWR5:       # %bb.0:
21998; PWR5-NEXT:    lis 5, 21845
21999; PWR5-NEXT:    lis 6, 13107
22000; PWR5-NEXT:    ori 5, 5, 21845
22001; PWR5-NEXT:    rotldi 8, 4, 63
22002; PWR5-NEXT:    rotldi 9, 3, 63
22003; PWR5-NEXT:    rldimi 5, 5, 32, 0
22004; PWR5-NEXT:    and 8, 8, 5
22005; PWR5-NEXT:    and 5, 9, 5
22006; PWR5-NEXT:    ori 6, 6, 13107
22007; PWR5-NEXT:    sub 3, 3, 5
22008; PWR5-NEXT:    rldimi 6, 6, 32, 0
22009; PWR5-NEXT:    sub 4, 4, 8
22010; PWR5-NEXT:    and 8, 3, 6
22011; PWR5-NEXT:    rotldi 3, 3, 62
22012; PWR5-NEXT:    and 3, 3, 6
22013; PWR5-NEXT:    lis 7, 3855
22014; PWR5-NEXT:    and 5, 4, 6
22015; PWR5-NEXT:    rotldi 4, 4, 62
22016; PWR5-NEXT:    add 3, 8, 3
22017; PWR5-NEXT:    lis 9, 257
22018; PWR5-NEXT:    ori 7, 7, 3855
22019; PWR5-NEXT:    and 4, 4, 6
22020; PWR5-NEXT:    rldicl 6, 3, 60, 4
22021; PWR5-NEXT:    ori 9, 9, 257
22022; PWR5-NEXT:    rldimi 7, 7, 32, 0
22023; PWR5-NEXT:    add 4, 5, 4
22024; PWR5-NEXT:    add 3, 3, 6
22025; PWR5-NEXT:    rldimi 9, 9, 32, 0
22026; PWR5-NEXT:    rldicl 5, 4, 60, 4
22027; PWR5-NEXT:    and 3, 3, 7
22028; PWR5-NEXT:    add 4, 4, 5
22029; PWR5-NEXT:    mulld 3, 3, 9
22030; PWR5-NEXT:    and 4, 4, 7
22031; PWR5-NEXT:    rldicl 3, 3, 8, 56
22032; PWR5-NEXT:    mulld 4, 4, 9
22033; PWR5-NEXT:    li 5, 39
22034; PWR5-NEXT:    subfic 3, 3, 39
22035; PWR5-NEXT:    rldicl 4, 4, 8, 56
22036; PWR5-NEXT:    subfe 3, 5, 5
22037; PWR5-NEXT:    subfic 4, 4, 39
22038; PWR5-NEXT:    subfe 4, 5, 5
22039; PWR5-NEXT:    blr
22040;
22041; PWR6-LABEL: ugt_39_v2i64:
22042; PWR6:       # %bb.0:
22043; PWR6-NEXT:    lis 5, 21845
22044; PWR6-NEXT:    lis 6, 13107
22045; PWR6-NEXT:    ori 5, 5, 21845
22046; PWR6-NEXT:    rotldi 8, 4, 63
22047; PWR6-NEXT:    rotldi 9, 3, 63
22048; PWR6-NEXT:    rldimi 5, 5, 32, 0
22049; PWR6-NEXT:    and 8, 8, 5
22050; PWR6-NEXT:    and 5, 9, 5
22051; PWR6-NEXT:    ori 6, 6, 13107
22052; PWR6-NEXT:    sub 3, 3, 5
22053; PWR6-NEXT:    rldimi 6, 6, 32, 0
22054; PWR6-NEXT:    sub 4, 4, 8
22055; PWR6-NEXT:    and 8, 3, 6
22056; PWR6-NEXT:    rotldi 3, 3, 62
22057; PWR6-NEXT:    and 3, 3, 6
22058; PWR6-NEXT:    lis 7, 3855
22059; PWR6-NEXT:    and 5, 4, 6
22060; PWR6-NEXT:    rotldi 4, 4, 62
22061; PWR6-NEXT:    add 3, 8, 3
22062; PWR6-NEXT:    lis 9, 257
22063; PWR6-NEXT:    ori 7, 7, 3855
22064; PWR6-NEXT:    and 4, 4, 6
22065; PWR6-NEXT:    rldicl 6, 3, 60, 4
22066; PWR6-NEXT:    ori 9, 9, 257
22067; PWR6-NEXT:    rldimi 7, 7, 32, 0
22068; PWR6-NEXT:    add 4, 5, 4
22069; PWR6-NEXT:    add 3, 3, 6
22070; PWR6-NEXT:    rldimi 9, 9, 32, 0
22071; PWR6-NEXT:    rldicl 5, 4, 60, 4
22072; PWR6-NEXT:    and 3, 3, 7
22073; PWR6-NEXT:    add 4, 4, 5
22074; PWR6-NEXT:    mulld 3, 3, 9
22075; PWR6-NEXT:    and 4, 4, 7
22076; PWR6-NEXT:    rldicl 3, 3, 8, 56
22077; PWR6-NEXT:    mulld 4, 4, 9
22078; PWR6-NEXT:    li 5, 39
22079; PWR6-NEXT:    subfic 3, 3, 39
22080; PWR6-NEXT:    rldicl 4, 4, 8, 56
22081; PWR6-NEXT:    subfe 3, 5, 5
22082; PWR6-NEXT:    subfic 4, 4, 39
22083; PWR6-NEXT:    subfe 4, 5, 5
22084; PWR6-NEXT:    blr
22085;
22086; PWR7-LABEL: ugt_39_v2i64:
22087; PWR7:       # %bb.0:
22088; PWR7-NEXT:    addi 3, 1, -32
22089; PWR7-NEXT:    li 5, 0
22090; PWR7-NEXT:    li 6, -1
22091; PWR7-NEXT:    stxvd2x 34, 0, 3
22092; PWR7-NEXT:    ld 3, -24(1)
22093; PWR7-NEXT:    ld 4, -32(1)
22094; PWR7-NEXT:    popcntd 3, 3
22095; PWR7-NEXT:    popcntd 4, 4
22096; PWR7-NEXT:    cmpldi 3, 39
22097; PWR7-NEXT:    iselgt 3, 6, 5
22098; PWR7-NEXT:    cmpldi 4, 39
22099; PWR7-NEXT:    iselgt 4, 6, 5
22100; PWR7-NEXT:    std 3, -8(1)
22101; PWR7-NEXT:    addi 3, 1, -16
22102; PWR7-NEXT:    std 4, -16(1)
22103; PWR7-NEXT:    lxvd2x 34, 0, 3
22104; PWR7-NEXT:    blr
22105;
22106; PWR8-LABEL: ugt_39_v2i64:
22107; PWR8:       # %bb.0:
22108; PWR8-NEXT:    addis 3, 2, .LCPI176_0@toc@ha
22109; PWR8-NEXT:    vpopcntd 2, 2
22110; PWR8-NEXT:    addi 3, 3, .LCPI176_0@toc@l
22111; PWR8-NEXT:    lxvd2x 35, 0, 3
22112; PWR8-NEXT:    vcmpgtud 2, 2, 3
22113; PWR8-NEXT:    blr
22114;
22115; PWR9-LABEL: ugt_39_v2i64:
22116; PWR9:       # %bb.0:
22117; PWR9-NEXT:    addis 3, 2, .LCPI176_0@toc@ha
22118; PWR9-NEXT:    vpopcntd 2, 2
22119; PWR9-NEXT:    addi 3, 3, .LCPI176_0@toc@l
22120; PWR9-NEXT:    lxvx 35, 0, 3
22121; PWR9-NEXT:    vcmpgtud 2, 2, 3
22122; PWR9-NEXT:    blr
22123  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22124  %3 = icmp ugt <2 x i64> %2, <i64 39, i64 39>
22125  %4 = sext <2 x i1> %3 to <2 x i64>
22126  ret <2 x i64> %4
22127}
22128
22129define <2 x i64> @ult_40_v2i64(<2 x i64> %0) {
22130; PWR5-LABEL: ult_40_v2i64:
22131; PWR5:       # %bb.0:
22132; PWR5-NEXT:    lis 5, 21845
22133; PWR5-NEXT:    lis 6, 13107
22134; PWR5-NEXT:    ori 5, 5, 21845
22135; PWR5-NEXT:    rotldi 8, 4, 63
22136; PWR5-NEXT:    rotldi 9, 3, 63
22137; PWR5-NEXT:    rldimi 5, 5, 32, 0
22138; PWR5-NEXT:    and 8, 8, 5
22139; PWR5-NEXT:    and 5, 9, 5
22140; PWR5-NEXT:    ori 6, 6, 13107
22141; PWR5-NEXT:    sub 3, 3, 5
22142; PWR5-NEXT:    rldimi 6, 6, 32, 0
22143; PWR5-NEXT:    sub 4, 4, 8
22144; PWR5-NEXT:    and 8, 3, 6
22145; PWR5-NEXT:    rotldi 3, 3, 62
22146; PWR5-NEXT:    and 3, 3, 6
22147; PWR5-NEXT:    lis 7, 3855
22148; PWR5-NEXT:    and 5, 4, 6
22149; PWR5-NEXT:    rotldi 4, 4, 62
22150; PWR5-NEXT:    add 3, 8, 3
22151; PWR5-NEXT:    lis 9, 257
22152; PWR5-NEXT:    ori 7, 7, 3855
22153; PWR5-NEXT:    and 4, 4, 6
22154; PWR5-NEXT:    rldicl 6, 3, 60, 4
22155; PWR5-NEXT:    ori 9, 9, 257
22156; PWR5-NEXT:    rldimi 7, 7, 32, 0
22157; PWR5-NEXT:    add 4, 5, 4
22158; PWR5-NEXT:    add 3, 3, 6
22159; PWR5-NEXT:    rldimi 9, 9, 32, 0
22160; PWR5-NEXT:    rldicl 5, 4, 60, 4
22161; PWR5-NEXT:    and 3, 3, 7
22162; PWR5-NEXT:    add 4, 4, 5
22163; PWR5-NEXT:    mulld 3, 3, 9
22164; PWR5-NEXT:    and 4, 4, 7
22165; PWR5-NEXT:    rldicl 3, 3, 8, 56
22166; PWR5-NEXT:    li 5, 40
22167; PWR5-NEXT:    mulld 4, 4, 9
22168; PWR5-NEXT:    subc 6, 3, 5
22169; PWR5-NEXT:    rldicl 4, 4, 8, 56
22170; PWR5-NEXT:    subfe 3, 3, 3
22171; PWR5-NEXT:    subc 5, 4, 5
22172; PWR5-NEXT:    subfe 4, 4, 4
22173; PWR5-NEXT:    blr
22174;
22175; PWR6-LABEL: ult_40_v2i64:
22176; PWR6:       # %bb.0:
22177; PWR6-NEXT:    lis 5, 21845
22178; PWR6-NEXT:    lis 6, 13107
22179; PWR6-NEXT:    ori 5, 5, 21845
22180; PWR6-NEXT:    rotldi 8, 4, 63
22181; PWR6-NEXT:    rotldi 9, 3, 63
22182; PWR6-NEXT:    rldimi 5, 5, 32, 0
22183; PWR6-NEXT:    and 8, 8, 5
22184; PWR6-NEXT:    and 5, 9, 5
22185; PWR6-NEXT:    ori 6, 6, 13107
22186; PWR6-NEXT:    sub 3, 3, 5
22187; PWR6-NEXT:    rldimi 6, 6, 32, 0
22188; PWR6-NEXT:    sub 4, 4, 8
22189; PWR6-NEXT:    and 8, 3, 6
22190; PWR6-NEXT:    rotldi 3, 3, 62
22191; PWR6-NEXT:    and 3, 3, 6
22192; PWR6-NEXT:    lis 7, 3855
22193; PWR6-NEXT:    and 5, 4, 6
22194; PWR6-NEXT:    rotldi 4, 4, 62
22195; PWR6-NEXT:    add 3, 8, 3
22196; PWR6-NEXT:    lis 9, 257
22197; PWR6-NEXT:    ori 7, 7, 3855
22198; PWR6-NEXT:    and 4, 4, 6
22199; PWR6-NEXT:    rldicl 6, 3, 60, 4
22200; PWR6-NEXT:    ori 9, 9, 257
22201; PWR6-NEXT:    rldimi 7, 7, 32, 0
22202; PWR6-NEXT:    add 4, 5, 4
22203; PWR6-NEXT:    add 3, 3, 6
22204; PWR6-NEXT:    rldimi 9, 9, 32, 0
22205; PWR6-NEXT:    rldicl 5, 4, 60, 4
22206; PWR6-NEXT:    and 3, 3, 7
22207; PWR6-NEXT:    add 4, 4, 5
22208; PWR6-NEXT:    mulld 3, 3, 9
22209; PWR6-NEXT:    and 4, 4, 7
22210; PWR6-NEXT:    rldicl 3, 3, 8, 56
22211; PWR6-NEXT:    li 5, 40
22212; PWR6-NEXT:    mulld 4, 4, 9
22213; PWR6-NEXT:    subc 6, 3, 5
22214; PWR6-NEXT:    rldicl 4, 4, 8, 56
22215; PWR6-NEXT:    subfe 3, 3, 3
22216; PWR6-NEXT:    subc 5, 4, 5
22217; PWR6-NEXT:    subfe 4, 4, 4
22218; PWR6-NEXT:    blr
22219;
22220; PWR7-LABEL: ult_40_v2i64:
22221; PWR7:       # %bb.0:
22222; PWR7-NEXT:    addi 3, 1, -32
22223; PWR7-NEXT:    li 5, 0
22224; PWR7-NEXT:    li 6, -1
22225; PWR7-NEXT:    stxvd2x 34, 0, 3
22226; PWR7-NEXT:    ld 3, -24(1)
22227; PWR7-NEXT:    ld 4, -32(1)
22228; PWR7-NEXT:    popcntd 3, 3
22229; PWR7-NEXT:    popcntd 4, 4
22230; PWR7-NEXT:    cmpldi 3, 40
22231; PWR7-NEXT:    isellt 3, 6, 5
22232; PWR7-NEXT:    cmpldi 4, 40
22233; PWR7-NEXT:    isellt 4, 6, 5
22234; PWR7-NEXT:    std 3, -8(1)
22235; PWR7-NEXT:    addi 3, 1, -16
22236; PWR7-NEXT:    std 4, -16(1)
22237; PWR7-NEXT:    lxvd2x 34, 0, 3
22238; PWR7-NEXT:    blr
22239;
22240; PWR8-LABEL: ult_40_v2i64:
22241; PWR8:       # %bb.0:
22242; PWR8-NEXT:    addis 3, 2, .LCPI177_0@toc@ha
22243; PWR8-NEXT:    vpopcntd 2, 2
22244; PWR8-NEXT:    addi 3, 3, .LCPI177_0@toc@l
22245; PWR8-NEXT:    lxvd2x 35, 0, 3
22246; PWR8-NEXT:    vcmpgtud 2, 3, 2
22247; PWR8-NEXT:    blr
22248;
22249; PWR9-LABEL: ult_40_v2i64:
22250; PWR9:       # %bb.0:
22251; PWR9-NEXT:    addis 3, 2, .LCPI177_0@toc@ha
22252; PWR9-NEXT:    vpopcntd 2, 2
22253; PWR9-NEXT:    addi 3, 3, .LCPI177_0@toc@l
22254; PWR9-NEXT:    lxvx 35, 0, 3
22255; PWR9-NEXT:    vcmpgtud 2, 3, 2
22256; PWR9-NEXT:    blr
22257  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22258  %3 = icmp ult <2 x i64> %2, <i64 40, i64 40>
22259  %4 = sext <2 x i1> %3 to <2 x i64>
22260  ret <2 x i64> %4
22261}
22262
22263define <2 x i64> @ugt_40_v2i64(<2 x i64> %0) {
22264; PWR5-LABEL: ugt_40_v2i64:
22265; PWR5:       # %bb.0:
22266; PWR5-NEXT:    lis 5, 21845
22267; PWR5-NEXT:    lis 6, 13107
22268; PWR5-NEXT:    ori 5, 5, 21845
22269; PWR5-NEXT:    rotldi 8, 4, 63
22270; PWR5-NEXT:    rotldi 9, 3, 63
22271; PWR5-NEXT:    rldimi 5, 5, 32, 0
22272; PWR5-NEXT:    and 8, 8, 5
22273; PWR5-NEXT:    and 5, 9, 5
22274; PWR5-NEXT:    ori 6, 6, 13107
22275; PWR5-NEXT:    sub 3, 3, 5
22276; PWR5-NEXT:    rldimi 6, 6, 32, 0
22277; PWR5-NEXT:    sub 4, 4, 8
22278; PWR5-NEXT:    and 8, 3, 6
22279; PWR5-NEXT:    rotldi 3, 3, 62
22280; PWR5-NEXT:    and 3, 3, 6
22281; PWR5-NEXT:    lis 7, 3855
22282; PWR5-NEXT:    and 5, 4, 6
22283; PWR5-NEXT:    rotldi 4, 4, 62
22284; PWR5-NEXT:    add 3, 8, 3
22285; PWR5-NEXT:    lis 9, 257
22286; PWR5-NEXT:    ori 7, 7, 3855
22287; PWR5-NEXT:    and 4, 4, 6
22288; PWR5-NEXT:    rldicl 6, 3, 60, 4
22289; PWR5-NEXT:    ori 9, 9, 257
22290; PWR5-NEXT:    rldimi 7, 7, 32, 0
22291; PWR5-NEXT:    add 4, 5, 4
22292; PWR5-NEXT:    add 3, 3, 6
22293; PWR5-NEXT:    rldimi 9, 9, 32, 0
22294; PWR5-NEXT:    rldicl 5, 4, 60, 4
22295; PWR5-NEXT:    and 3, 3, 7
22296; PWR5-NEXT:    add 4, 4, 5
22297; PWR5-NEXT:    mulld 3, 3, 9
22298; PWR5-NEXT:    and 4, 4, 7
22299; PWR5-NEXT:    rldicl 3, 3, 8, 56
22300; PWR5-NEXT:    mulld 4, 4, 9
22301; PWR5-NEXT:    li 5, 40
22302; PWR5-NEXT:    subfic 3, 3, 40
22303; PWR5-NEXT:    rldicl 4, 4, 8, 56
22304; PWR5-NEXT:    subfe 3, 5, 5
22305; PWR5-NEXT:    subfic 4, 4, 40
22306; PWR5-NEXT:    subfe 4, 5, 5
22307; PWR5-NEXT:    blr
22308;
22309; PWR6-LABEL: ugt_40_v2i64:
22310; PWR6:       # %bb.0:
22311; PWR6-NEXT:    lis 5, 21845
22312; PWR6-NEXT:    lis 6, 13107
22313; PWR6-NEXT:    ori 5, 5, 21845
22314; PWR6-NEXT:    rotldi 8, 4, 63
22315; PWR6-NEXT:    rotldi 9, 3, 63
22316; PWR6-NEXT:    rldimi 5, 5, 32, 0
22317; PWR6-NEXT:    and 8, 8, 5
22318; PWR6-NEXT:    and 5, 9, 5
22319; PWR6-NEXT:    ori 6, 6, 13107
22320; PWR6-NEXT:    sub 3, 3, 5
22321; PWR6-NEXT:    rldimi 6, 6, 32, 0
22322; PWR6-NEXT:    sub 4, 4, 8
22323; PWR6-NEXT:    and 8, 3, 6
22324; PWR6-NEXT:    rotldi 3, 3, 62
22325; PWR6-NEXT:    and 3, 3, 6
22326; PWR6-NEXT:    lis 7, 3855
22327; PWR6-NEXT:    and 5, 4, 6
22328; PWR6-NEXT:    rotldi 4, 4, 62
22329; PWR6-NEXT:    add 3, 8, 3
22330; PWR6-NEXT:    lis 9, 257
22331; PWR6-NEXT:    ori 7, 7, 3855
22332; PWR6-NEXT:    and 4, 4, 6
22333; PWR6-NEXT:    rldicl 6, 3, 60, 4
22334; PWR6-NEXT:    ori 9, 9, 257
22335; PWR6-NEXT:    rldimi 7, 7, 32, 0
22336; PWR6-NEXT:    add 4, 5, 4
22337; PWR6-NEXT:    add 3, 3, 6
22338; PWR6-NEXT:    rldimi 9, 9, 32, 0
22339; PWR6-NEXT:    rldicl 5, 4, 60, 4
22340; PWR6-NEXT:    and 3, 3, 7
22341; PWR6-NEXT:    add 4, 4, 5
22342; PWR6-NEXT:    mulld 3, 3, 9
22343; PWR6-NEXT:    and 4, 4, 7
22344; PWR6-NEXT:    rldicl 3, 3, 8, 56
22345; PWR6-NEXT:    mulld 4, 4, 9
22346; PWR6-NEXT:    li 5, 40
22347; PWR6-NEXT:    subfic 3, 3, 40
22348; PWR6-NEXT:    rldicl 4, 4, 8, 56
22349; PWR6-NEXT:    subfe 3, 5, 5
22350; PWR6-NEXT:    subfic 4, 4, 40
22351; PWR6-NEXT:    subfe 4, 5, 5
22352; PWR6-NEXT:    blr
22353;
22354; PWR7-LABEL: ugt_40_v2i64:
22355; PWR7:       # %bb.0:
22356; PWR7-NEXT:    addi 3, 1, -32
22357; PWR7-NEXT:    li 5, 0
22358; PWR7-NEXT:    li 6, -1
22359; PWR7-NEXT:    stxvd2x 34, 0, 3
22360; PWR7-NEXT:    ld 3, -24(1)
22361; PWR7-NEXT:    ld 4, -32(1)
22362; PWR7-NEXT:    popcntd 3, 3
22363; PWR7-NEXT:    popcntd 4, 4
22364; PWR7-NEXT:    cmpldi 3, 40
22365; PWR7-NEXT:    iselgt 3, 6, 5
22366; PWR7-NEXT:    cmpldi 4, 40
22367; PWR7-NEXT:    iselgt 4, 6, 5
22368; PWR7-NEXT:    std 3, -8(1)
22369; PWR7-NEXT:    addi 3, 1, -16
22370; PWR7-NEXT:    std 4, -16(1)
22371; PWR7-NEXT:    lxvd2x 34, 0, 3
22372; PWR7-NEXT:    blr
22373;
22374; PWR8-LABEL: ugt_40_v2i64:
22375; PWR8:       # %bb.0:
22376; PWR8-NEXT:    addis 3, 2, .LCPI178_0@toc@ha
22377; PWR8-NEXT:    vpopcntd 2, 2
22378; PWR8-NEXT:    addi 3, 3, .LCPI178_0@toc@l
22379; PWR8-NEXT:    lxvd2x 35, 0, 3
22380; PWR8-NEXT:    vcmpgtud 2, 2, 3
22381; PWR8-NEXT:    blr
22382;
22383; PWR9-LABEL: ugt_40_v2i64:
22384; PWR9:       # %bb.0:
22385; PWR9-NEXT:    addis 3, 2, .LCPI178_0@toc@ha
22386; PWR9-NEXT:    vpopcntd 2, 2
22387; PWR9-NEXT:    addi 3, 3, .LCPI178_0@toc@l
22388; PWR9-NEXT:    lxvx 35, 0, 3
22389; PWR9-NEXT:    vcmpgtud 2, 2, 3
22390; PWR9-NEXT:    blr
22391  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22392  %3 = icmp ugt <2 x i64> %2, <i64 40, i64 40>
22393  %4 = sext <2 x i1> %3 to <2 x i64>
22394  ret <2 x i64> %4
22395}
22396
22397define <2 x i64> @ult_41_v2i64(<2 x i64> %0) {
22398; PWR5-LABEL: ult_41_v2i64:
22399; PWR5:       # %bb.0:
22400; PWR5-NEXT:    lis 5, 21845
22401; PWR5-NEXT:    lis 6, 13107
22402; PWR5-NEXT:    ori 5, 5, 21845
22403; PWR5-NEXT:    rotldi 8, 4, 63
22404; PWR5-NEXT:    rotldi 9, 3, 63
22405; PWR5-NEXT:    rldimi 5, 5, 32, 0
22406; PWR5-NEXT:    and 8, 8, 5
22407; PWR5-NEXT:    and 5, 9, 5
22408; PWR5-NEXT:    ori 6, 6, 13107
22409; PWR5-NEXT:    sub 3, 3, 5
22410; PWR5-NEXT:    rldimi 6, 6, 32, 0
22411; PWR5-NEXT:    sub 4, 4, 8
22412; PWR5-NEXT:    and 8, 3, 6
22413; PWR5-NEXT:    rotldi 3, 3, 62
22414; PWR5-NEXT:    and 3, 3, 6
22415; PWR5-NEXT:    lis 7, 3855
22416; PWR5-NEXT:    and 5, 4, 6
22417; PWR5-NEXT:    rotldi 4, 4, 62
22418; PWR5-NEXT:    add 3, 8, 3
22419; PWR5-NEXT:    lis 9, 257
22420; PWR5-NEXT:    ori 7, 7, 3855
22421; PWR5-NEXT:    and 4, 4, 6
22422; PWR5-NEXT:    rldicl 6, 3, 60, 4
22423; PWR5-NEXT:    ori 9, 9, 257
22424; PWR5-NEXT:    rldimi 7, 7, 32, 0
22425; PWR5-NEXT:    add 4, 5, 4
22426; PWR5-NEXT:    add 3, 3, 6
22427; PWR5-NEXT:    rldimi 9, 9, 32, 0
22428; PWR5-NEXT:    rldicl 5, 4, 60, 4
22429; PWR5-NEXT:    and 3, 3, 7
22430; PWR5-NEXT:    add 4, 4, 5
22431; PWR5-NEXT:    mulld 3, 3, 9
22432; PWR5-NEXT:    and 4, 4, 7
22433; PWR5-NEXT:    rldicl 3, 3, 8, 56
22434; PWR5-NEXT:    li 5, 41
22435; PWR5-NEXT:    mulld 4, 4, 9
22436; PWR5-NEXT:    subc 6, 3, 5
22437; PWR5-NEXT:    rldicl 4, 4, 8, 56
22438; PWR5-NEXT:    subfe 3, 3, 3
22439; PWR5-NEXT:    subc 5, 4, 5
22440; PWR5-NEXT:    subfe 4, 4, 4
22441; PWR5-NEXT:    blr
22442;
22443; PWR6-LABEL: ult_41_v2i64:
22444; PWR6:       # %bb.0:
22445; PWR6-NEXT:    lis 5, 21845
22446; PWR6-NEXT:    lis 6, 13107
22447; PWR6-NEXT:    ori 5, 5, 21845
22448; PWR6-NEXT:    rotldi 8, 4, 63
22449; PWR6-NEXT:    rotldi 9, 3, 63
22450; PWR6-NEXT:    rldimi 5, 5, 32, 0
22451; PWR6-NEXT:    and 8, 8, 5
22452; PWR6-NEXT:    and 5, 9, 5
22453; PWR6-NEXT:    ori 6, 6, 13107
22454; PWR6-NEXT:    sub 3, 3, 5
22455; PWR6-NEXT:    rldimi 6, 6, 32, 0
22456; PWR6-NEXT:    sub 4, 4, 8
22457; PWR6-NEXT:    and 8, 3, 6
22458; PWR6-NEXT:    rotldi 3, 3, 62
22459; PWR6-NEXT:    and 3, 3, 6
22460; PWR6-NEXT:    lis 7, 3855
22461; PWR6-NEXT:    and 5, 4, 6
22462; PWR6-NEXT:    rotldi 4, 4, 62
22463; PWR6-NEXT:    add 3, 8, 3
22464; PWR6-NEXT:    lis 9, 257
22465; PWR6-NEXT:    ori 7, 7, 3855
22466; PWR6-NEXT:    and 4, 4, 6
22467; PWR6-NEXT:    rldicl 6, 3, 60, 4
22468; PWR6-NEXT:    ori 9, 9, 257
22469; PWR6-NEXT:    rldimi 7, 7, 32, 0
22470; PWR6-NEXT:    add 4, 5, 4
22471; PWR6-NEXT:    add 3, 3, 6
22472; PWR6-NEXT:    rldimi 9, 9, 32, 0
22473; PWR6-NEXT:    rldicl 5, 4, 60, 4
22474; PWR6-NEXT:    and 3, 3, 7
22475; PWR6-NEXT:    add 4, 4, 5
22476; PWR6-NEXT:    mulld 3, 3, 9
22477; PWR6-NEXT:    and 4, 4, 7
22478; PWR6-NEXT:    rldicl 3, 3, 8, 56
22479; PWR6-NEXT:    li 5, 41
22480; PWR6-NEXT:    mulld 4, 4, 9
22481; PWR6-NEXT:    subc 6, 3, 5
22482; PWR6-NEXT:    rldicl 4, 4, 8, 56
22483; PWR6-NEXT:    subfe 3, 3, 3
22484; PWR6-NEXT:    subc 5, 4, 5
22485; PWR6-NEXT:    subfe 4, 4, 4
22486; PWR6-NEXT:    blr
22487;
22488; PWR7-LABEL: ult_41_v2i64:
22489; PWR7:       # %bb.0:
22490; PWR7-NEXT:    addi 3, 1, -32
22491; PWR7-NEXT:    li 5, 0
22492; PWR7-NEXT:    li 6, -1
22493; PWR7-NEXT:    stxvd2x 34, 0, 3
22494; PWR7-NEXT:    ld 3, -24(1)
22495; PWR7-NEXT:    ld 4, -32(1)
22496; PWR7-NEXT:    popcntd 3, 3
22497; PWR7-NEXT:    popcntd 4, 4
22498; PWR7-NEXT:    cmpldi 3, 41
22499; PWR7-NEXT:    isellt 3, 6, 5
22500; PWR7-NEXT:    cmpldi 4, 41
22501; PWR7-NEXT:    isellt 4, 6, 5
22502; PWR7-NEXT:    std 3, -8(1)
22503; PWR7-NEXT:    addi 3, 1, -16
22504; PWR7-NEXT:    std 4, -16(1)
22505; PWR7-NEXT:    lxvd2x 34, 0, 3
22506; PWR7-NEXT:    blr
22507;
22508; PWR8-LABEL: ult_41_v2i64:
22509; PWR8:       # %bb.0:
22510; PWR8-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
22511; PWR8-NEXT:    vpopcntd 2, 2
22512; PWR8-NEXT:    addi 3, 3, .LCPI179_0@toc@l
22513; PWR8-NEXT:    lxvd2x 35, 0, 3
22514; PWR8-NEXT:    vcmpgtud 2, 3, 2
22515; PWR8-NEXT:    blr
22516;
22517; PWR9-LABEL: ult_41_v2i64:
22518; PWR9:       # %bb.0:
22519; PWR9-NEXT:    addis 3, 2, .LCPI179_0@toc@ha
22520; PWR9-NEXT:    vpopcntd 2, 2
22521; PWR9-NEXT:    addi 3, 3, .LCPI179_0@toc@l
22522; PWR9-NEXT:    lxvx 35, 0, 3
22523; PWR9-NEXT:    vcmpgtud 2, 3, 2
22524; PWR9-NEXT:    blr
22525  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22526  %3 = icmp ult <2 x i64> %2, <i64 41, i64 41>
22527  %4 = sext <2 x i1> %3 to <2 x i64>
22528  ret <2 x i64> %4
22529}
22530
22531define <2 x i64> @ugt_41_v2i64(<2 x i64> %0) {
22532; PWR5-LABEL: ugt_41_v2i64:
22533; PWR5:       # %bb.0:
22534; PWR5-NEXT:    lis 5, 21845
22535; PWR5-NEXT:    lis 6, 13107
22536; PWR5-NEXT:    ori 5, 5, 21845
22537; PWR5-NEXT:    rotldi 8, 4, 63
22538; PWR5-NEXT:    rotldi 9, 3, 63
22539; PWR5-NEXT:    rldimi 5, 5, 32, 0
22540; PWR5-NEXT:    and 8, 8, 5
22541; PWR5-NEXT:    and 5, 9, 5
22542; PWR5-NEXT:    ori 6, 6, 13107
22543; PWR5-NEXT:    sub 3, 3, 5
22544; PWR5-NEXT:    rldimi 6, 6, 32, 0
22545; PWR5-NEXT:    sub 4, 4, 8
22546; PWR5-NEXT:    and 8, 3, 6
22547; PWR5-NEXT:    rotldi 3, 3, 62
22548; PWR5-NEXT:    and 3, 3, 6
22549; PWR5-NEXT:    lis 7, 3855
22550; PWR5-NEXT:    and 5, 4, 6
22551; PWR5-NEXT:    rotldi 4, 4, 62
22552; PWR5-NEXT:    add 3, 8, 3
22553; PWR5-NEXT:    lis 9, 257
22554; PWR5-NEXT:    ori 7, 7, 3855
22555; PWR5-NEXT:    and 4, 4, 6
22556; PWR5-NEXT:    rldicl 6, 3, 60, 4
22557; PWR5-NEXT:    ori 9, 9, 257
22558; PWR5-NEXT:    rldimi 7, 7, 32, 0
22559; PWR5-NEXT:    add 4, 5, 4
22560; PWR5-NEXT:    add 3, 3, 6
22561; PWR5-NEXT:    rldimi 9, 9, 32, 0
22562; PWR5-NEXT:    rldicl 5, 4, 60, 4
22563; PWR5-NEXT:    and 3, 3, 7
22564; PWR5-NEXT:    add 4, 4, 5
22565; PWR5-NEXT:    mulld 3, 3, 9
22566; PWR5-NEXT:    and 4, 4, 7
22567; PWR5-NEXT:    rldicl 3, 3, 8, 56
22568; PWR5-NEXT:    mulld 4, 4, 9
22569; PWR5-NEXT:    li 5, 41
22570; PWR5-NEXT:    subfic 3, 3, 41
22571; PWR5-NEXT:    rldicl 4, 4, 8, 56
22572; PWR5-NEXT:    subfe 3, 5, 5
22573; PWR5-NEXT:    subfic 4, 4, 41
22574; PWR5-NEXT:    subfe 4, 5, 5
22575; PWR5-NEXT:    blr
22576;
22577; PWR6-LABEL: ugt_41_v2i64:
22578; PWR6:       # %bb.0:
22579; PWR6-NEXT:    lis 5, 21845
22580; PWR6-NEXT:    lis 6, 13107
22581; PWR6-NEXT:    ori 5, 5, 21845
22582; PWR6-NEXT:    rotldi 8, 4, 63
22583; PWR6-NEXT:    rotldi 9, 3, 63
22584; PWR6-NEXT:    rldimi 5, 5, 32, 0
22585; PWR6-NEXT:    and 8, 8, 5
22586; PWR6-NEXT:    and 5, 9, 5
22587; PWR6-NEXT:    ori 6, 6, 13107
22588; PWR6-NEXT:    sub 3, 3, 5
22589; PWR6-NEXT:    rldimi 6, 6, 32, 0
22590; PWR6-NEXT:    sub 4, 4, 8
22591; PWR6-NEXT:    and 8, 3, 6
22592; PWR6-NEXT:    rotldi 3, 3, 62
22593; PWR6-NEXT:    and 3, 3, 6
22594; PWR6-NEXT:    lis 7, 3855
22595; PWR6-NEXT:    and 5, 4, 6
22596; PWR6-NEXT:    rotldi 4, 4, 62
22597; PWR6-NEXT:    add 3, 8, 3
22598; PWR6-NEXT:    lis 9, 257
22599; PWR6-NEXT:    ori 7, 7, 3855
22600; PWR6-NEXT:    and 4, 4, 6
22601; PWR6-NEXT:    rldicl 6, 3, 60, 4
22602; PWR6-NEXT:    ori 9, 9, 257
22603; PWR6-NEXT:    rldimi 7, 7, 32, 0
22604; PWR6-NEXT:    add 4, 5, 4
22605; PWR6-NEXT:    add 3, 3, 6
22606; PWR6-NEXT:    rldimi 9, 9, 32, 0
22607; PWR6-NEXT:    rldicl 5, 4, 60, 4
22608; PWR6-NEXT:    and 3, 3, 7
22609; PWR6-NEXT:    add 4, 4, 5
22610; PWR6-NEXT:    mulld 3, 3, 9
22611; PWR6-NEXT:    and 4, 4, 7
22612; PWR6-NEXT:    rldicl 3, 3, 8, 56
22613; PWR6-NEXT:    mulld 4, 4, 9
22614; PWR6-NEXT:    li 5, 41
22615; PWR6-NEXT:    subfic 3, 3, 41
22616; PWR6-NEXT:    rldicl 4, 4, 8, 56
22617; PWR6-NEXT:    subfe 3, 5, 5
22618; PWR6-NEXT:    subfic 4, 4, 41
22619; PWR6-NEXT:    subfe 4, 5, 5
22620; PWR6-NEXT:    blr
22621;
22622; PWR7-LABEL: ugt_41_v2i64:
22623; PWR7:       # %bb.0:
22624; PWR7-NEXT:    addi 3, 1, -32
22625; PWR7-NEXT:    li 5, 0
22626; PWR7-NEXT:    li 6, -1
22627; PWR7-NEXT:    stxvd2x 34, 0, 3
22628; PWR7-NEXT:    ld 3, -24(1)
22629; PWR7-NEXT:    ld 4, -32(1)
22630; PWR7-NEXT:    popcntd 3, 3
22631; PWR7-NEXT:    popcntd 4, 4
22632; PWR7-NEXT:    cmpldi 3, 41
22633; PWR7-NEXT:    iselgt 3, 6, 5
22634; PWR7-NEXT:    cmpldi 4, 41
22635; PWR7-NEXT:    iselgt 4, 6, 5
22636; PWR7-NEXT:    std 3, -8(1)
22637; PWR7-NEXT:    addi 3, 1, -16
22638; PWR7-NEXT:    std 4, -16(1)
22639; PWR7-NEXT:    lxvd2x 34, 0, 3
22640; PWR7-NEXT:    blr
22641;
22642; PWR8-LABEL: ugt_41_v2i64:
22643; PWR8:       # %bb.0:
22644; PWR8-NEXT:    addis 3, 2, .LCPI180_0@toc@ha
22645; PWR8-NEXT:    vpopcntd 2, 2
22646; PWR8-NEXT:    addi 3, 3, .LCPI180_0@toc@l
22647; PWR8-NEXT:    lxvd2x 35, 0, 3
22648; PWR8-NEXT:    vcmpgtud 2, 2, 3
22649; PWR8-NEXT:    blr
22650;
22651; PWR9-LABEL: ugt_41_v2i64:
22652; PWR9:       # %bb.0:
22653; PWR9-NEXT:    addis 3, 2, .LCPI180_0@toc@ha
22654; PWR9-NEXT:    vpopcntd 2, 2
22655; PWR9-NEXT:    addi 3, 3, .LCPI180_0@toc@l
22656; PWR9-NEXT:    lxvx 35, 0, 3
22657; PWR9-NEXT:    vcmpgtud 2, 2, 3
22658; PWR9-NEXT:    blr
22659  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22660  %3 = icmp ugt <2 x i64> %2, <i64 41, i64 41>
22661  %4 = sext <2 x i1> %3 to <2 x i64>
22662  ret <2 x i64> %4
22663}
22664
22665define <2 x i64> @ult_42_v2i64(<2 x i64> %0) {
22666; PWR5-LABEL: ult_42_v2i64:
22667; PWR5:       # %bb.0:
22668; PWR5-NEXT:    lis 5, 21845
22669; PWR5-NEXT:    lis 6, 13107
22670; PWR5-NEXT:    ori 5, 5, 21845
22671; PWR5-NEXT:    rotldi 8, 4, 63
22672; PWR5-NEXT:    rotldi 9, 3, 63
22673; PWR5-NEXT:    rldimi 5, 5, 32, 0
22674; PWR5-NEXT:    and 8, 8, 5
22675; PWR5-NEXT:    and 5, 9, 5
22676; PWR5-NEXT:    ori 6, 6, 13107
22677; PWR5-NEXT:    sub 3, 3, 5
22678; PWR5-NEXT:    rldimi 6, 6, 32, 0
22679; PWR5-NEXT:    sub 4, 4, 8
22680; PWR5-NEXT:    and 8, 3, 6
22681; PWR5-NEXT:    rotldi 3, 3, 62
22682; PWR5-NEXT:    and 3, 3, 6
22683; PWR5-NEXT:    lis 7, 3855
22684; PWR5-NEXT:    and 5, 4, 6
22685; PWR5-NEXT:    rotldi 4, 4, 62
22686; PWR5-NEXT:    add 3, 8, 3
22687; PWR5-NEXT:    lis 9, 257
22688; PWR5-NEXT:    ori 7, 7, 3855
22689; PWR5-NEXT:    and 4, 4, 6
22690; PWR5-NEXT:    rldicl 6, 3, 60, 4
22691; PWR5-NEXT:    ori 9, 9, 257
22692; PWR5-NEXT:    rldimi 7, 7, 32, 0
22693; PWR5-NEXT:    add 4, 5, 4
22694; PWR5-NEXT:    add 3, 3, 6
22695; PWR5-NEXT:    rldimi 9, 9, 32, 0
22696; PWR5-NEXT:    rldicl 5, 4, 60, 4
22697; PWR5-NEXT:    and 3, 3, 7
22698; PWR5-NEXT:    add 4, 4, 5
22699; PWR5-NEXT:    mulld 3, 3, 9
22700; PWR5-NEXT:    and 4, 4, 7
22701; PWR5-NEXT:    rldicl 3, 3, 8, 56
22702; PWR5-NEXT:    li 5, 42
22703; PWR5-NEXT:    mulld 4, 4, 9
22704; PWR5-NEXT:    subc 6, 3, 5
22705; PWR5-NEXT:    rldicl 4, 4, 8, 56
22706; PWR5-NEXT:    subfe 3, 3, 3
22707; PWR5-NEXT:    subc 5, 4, 5
22708; PWR5-NEXT:    subfe 4, 4, 4
22709; PWR5-NEXT:    blr
22710;
22711; PWR6-LABEL: ult_42_v2i64:
22712; PWR6:       # %bb.0:
22713; PWR6-NEXT:    lis 5, 21845
22714; PWR6-NEXT:    lis 6, 13107
22715; PWR6-NEXT:    ori 5, 5, 21845
22716; PWR6-NEXT:    rotldi 8, 4, 63
22717; PWR6-NEXT:    rotldi 9, 3, 63
22718; PWR6-NEXT:    rldimi 5, 5, 32, 0
22719; PWR6-NEXT:    and 8, 8, 5
22720; PWR6-NEXT:    and 5, 9, 5
22721; PWR6-NEXT:    ori 6, 6, 13107
22722; PWR6-NEXT:    sub 3, 3, 5
22723; PWR6-NEXT:    rldimi 6, 6, 32, 0
22724; PWR6-NEXT:    sub 4, 4, 8
22725; PWR6-NEXT:    and 8, 3, 6
22726; PWR6-NEXT:    rotldi 3, 3, 62
22727; PWR6-NEXT:    and 3, 3, 6
22728; PWR6-NEXT:    lis 7, 3855
22729; PWR6-NEXT:    and 5, 4, 6
22730; PWR6-NEXT:    rotldi 4, 4, 62
22731; PWR6-NEXT:    add 3, 8, 3
22732; PWR6-NEXT:    lis 9, 257
22733; PWR6-NEXT:    ori 7, 7, 3855
22734; PWR6-NEXT:    and 4, 4, 6
22735; PWR6-NEXT:    rldicl 6, 3, 60, 4
22736; PWR6-NEXT:    ori 9, 9, 257
22737; PWR6-NEXT:    rldimi 7, 7, 32, 0
22738; PWR6-NEXT:    add 4, 5, 4
22739; PWR6-NEXT:    add 3, 3, 6
22740; PWR6-NEXT:    rldimi 9, 9, 32, 0
22741; PWR6-NEXT:    rldicl 5, 4, 60, 4
22742; PWR6-NEXT:    and 3, 3, 7
22743; PWR6-NEXT:    add 4, 4, 5
22744; PWR6-NEXT:    mulld 3, 3, 9
22745; PWR6-NEXT:    and 4, 4, 7
22746; PWR6-NEXT:    rldicl 3, 3, 8, 56
22747; PWR6-NEXT:    li 5, 42
22748; PWR6-NEXT:    mulld 4, 4, 9
22749; PWR6-NEXT:    subc 6, 3, 5
22750; PWR6-NEXT:    rldicl 4, 4, 8, 56
22751; PWR6-NEXT:    subfe 3, 3, 3
22752; PWR6-NEXT:    subc 5, 4, 5
22753; PWR6-NEXT:    subfe 4, 4, 4
22754; PWR6-NEXT:    blr
22755;
22756; PWR7-LABEL: ult_42_v2i64:
22757; PWR7:       # %bb.0:
22758; PWR7-NEXT:    addi 3, 1, -32
22759; PWR7-NEXT:    li 5, 0
22760; PWR7-NEXT:    li 6, -1
22761; PWR7-NEXT:    stxvd2x 34, 0, 3
22762; PWR7-NEXT:    ld 3, -24(1)
22763; PWR7-NEXT:    ld 4, -32(1)
22764; PWR7-NEXT:    popcntd 3, 3
22765; PWR7-NEXT:    popcntd 4, 4
22766; PWR7-NEXT:    cmpldi 3, 42
22767; PWR7-NEXT:    isellt 3, 6, 5
22768; PWR7-NEXT:    cmpldi 4, 42
22769; PWR7-NEXT:    isellt 4, 6, 5
22770; PWR7-NEXT:    std 3, -8(1)
22771; PWR7-NEXT:    addi 3, 1, -16
22772; PWR7-NEXT:    std 4, -16(1)
22773; PWR7-NEXT:    lxvd2x 34, 0, 3
22774; PWR7-NEXT:    blr
22775;
22776; PWR8-LABEL: ult_42_v2i64:
22777; PWR8:       # %bb.0:
22778; PWR8-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
22779; PWR8-NEXT:    vpopcntd 2, 2
22780; PWR8-NEXT:    addi 3, 3, .LCPI181_0@toc@l
22781; PWR8-NEXT:    lxvd2x 35, 0, 3
22782; PWR8-NEXT:    vcmpgtud 2, 3, 2
22783; PWR8-NEXT:    blr
22784;
22785; PWR9-LABEL: ult_42_v2i64:
22786; PWR9:       # %bb.0:
22787; PWR9-NEXT:    addis 3, 2, .LCPI181_0@toc@ha
22788; PWR9-NEXT:    vpopcntd 2, 2
22789; PWR9-NEXT:    addi 3, 3, .LCPI181_0@toc@l
22790; PWR9-NEXT:    lxvx 35, 0, 3
22791; PWR9-NEXT:    vcmpgtud 2, 3, 2
22792; PWR9-NEXT:    blr
22793  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22794  %3 = icmp ult <2 x i64> %2, <i64 42, i64 42>
22795  %4 = sext <2 x i1> %3 to <2 x i64>
22796  ret <2 x i64> %4
22797}
22798
22799define <2 x i64> @ugt_42_v2i64(<2 x i64> %0) {
22800; PWR5-LABEL: ugt_42_v2i64:
22801; PWR5:       # %bb.0:
22802; PWR5-NEXT:    lis 5, 21845
22803; PWR5-NEXT:    lis 6, 13107
22804; PWR5-NEXT:    ori 5, 5, 21845
22805; PWR5-NEXT:    rotldi 8, 4, 63
22806; PWR5-NEXT:    rotldi 9, 3, 63
22807; PWR5-NEXT:    rldimi 5, 5, 32, 0
22808; PWR5-NEXT:    and 8, 8, 5
22809; PWR5-NEXT:    and 5, 9, 5
22810; PWR5-NEXT:    ori 6, 6, 13107
22811; PWR5-NEXT:    sub 3, 3, 5
22812; PWR5-NEXT:    rldimi 6, 6, 32, 0
22813; PWR5-NEXT:    sub 4, 4, 8
22814; PWR5-NEXT:    and 8, 3, 6
22815; PWR5-NEXT:    rotldi 3, 3, 62
22816; PWR5-NEXT:    and 3, 3, 6
22817; PWR5-NEXT:    lis 7, 3855
22818; PWR5-NEXT:    and 5, 4, 6
22819; PWR5-NEXT:    rotldi 4, 4, 62
22820; PWR5-NEXT:    add 3, 8, 3
22821; PWR5-NEXT:    lis 9, 257
22822; PWR5-NEXT:    ori 7, 7, 3855
22823; PWR5-NEXT:    and 4, 4, 6
22824; PWR5-NEXT:    rldicl 6, 3, 60, 4
22825; PWR5-NEXT:    ori 9, 9, 257
22826; PWR5-NEXT:    rldimi 7, 7, 32, 0
22827; PWR5-NEXT:    add 4, 5, 4
22828; PWR5-NEXT:    add 3, 3, 6
22829; PWR5-NEXT:    rldimi 9, 9, 32, 0
22830; PWR5-NEXT:    rldicl 5, 4, 60, 4
22831; PWR5-NEXT:    and 3, 3, 7
22832; PWR5-NEXT:    add 4, 4, 5
22833; PWR5-NEXT:    mulld 3, 3, 9
22834; PWR5-NEXT:    and 4, 4, 7
22835; PWR5-NEXT:    rldicl 3, 3, 8, 56
22836; PWR5-NEXT:    mulld 4, 4, 9
22837; PWR5-NEXT:    li 5, 42
22838; PWR5-NEXT:    subfic 3, 3, 42
22839; PWR5-NEXT:    rldicl 4, 4, 8, 56
22840; PWR5-NEXT:    subfe 3, 5, 5
22841; PWR5-NEXT:    subfic 4, 4, 42
22842; PWR5-NEXT:    subfe 4, 5, 5
22843; PWR5-NEXT:    blr
22844;
22845; PWR6-LABEL: ugt_42_v2i64:
22846; PWR6:       # %bb.0:
22847; PWR6-NEXT:    lis 5, 21845
22848; PWR6-NEXT:    lis 6, 13107
22849; PWR6-NEXT:    ori 5, 5, 21845
22850; PWR6-NEXT:    rotldi 8, 4, 63
22851; PWR6-NEXT:    rotldi 9, 3, 63
22852; PWR6-NEXT:    rldimi 5, 5, 32, 0
22853; PWR6-NEXT:    and 8, 8, 5
22854; PWR6-NEXT:    and 5, 9, 5
22855; PWR6-NEXT:    ori 6, 6, 13107
22856; PWR6-NEXT:    sub 3, 3, 5
22857; PWR6-NEXT:    rldimi 6, 6, 32, 0
22858; PWR6-NEXT:    sub 4, 4, 8
22859; PWR6-NEXT:    and 8, 3, 6
22860; PWR6-NEXT:    rotldi 3, 3, 62
22861; PWR6-NEXT:    and 3, 3, 6
22862; PWR6-NEXT:    lis 7, 3855
22863; PWR6-NEXT:    and 5, 4, 6
22864; PWR6-NEXT:    rotldi 4, 4, 62
22865; PWR6-NEXT:    add 3, 8, 3
22866; PWR6-NEXT:    lis 9, 257
22867; PWR6-NEXT:    ori 7, 7, 3855
22868; PWR6-NEXT:    and 4, 4, 6
22869; PWR6-NEXT:    rldicl 6, 3, 60, 4
22870; PWR6-NEXT:    ori 9, 9, 257
22871; PWR6-NEXT:    rldimi 7, 7, 32, 0
22872; PWR6-NEXT:    add 4, 5, 4
22873; PWR6-NEXT:    add 3, 3, 6
22874; PWR6-NEXT:    rldimi 9, 9, 32, 0
22875; PWR6-NEXT:    rldicl 5, 4, 60, 4
22876; PWR6-NEXT:    and 3, 3, 7
22877; PWR6-NEXT:    add 4, 4, 5
22878; PWR6-NEXT:    mulld 3, 3, 9
22879; PWR6-NEXT:    and 4, 4, 7
22880; PWR6-NEXT:    rldicl 3, 3, 8, 56
22881; PWR6-NEXT:    mulld 4, 4, 9
22882; PWR6-NEXT:    li 5, 42
22883; PWR6-NEXT:    subfic 3, 3, 42
22884; PWR6-NEXT:    rldicl 4, 4, 8, 56
22885; PWR6-NEXT:    subfe 3, 5, 5
22886; PWR6-NEXT:    subfic 4, 4, 42
22887; PWR6-NEXT:    subfe 4, 5, 5
22888; PWR6-NEXT:    blr
22889;
22890; PWR7-LABEL: ugt_42_v2i64:
22891; PWR7:       # %bb.0:
22892; PWR7-NEXT:    addi 3, 1, -32
22893; PWR7-NEXT:    li 5, 0
22894; PWR7-NEXT:    li 6, -1
22895; PWR7-NEXT:    stxvd2x 34, 0, 3
22896; PWR7-NEXT:    ld 3, -24(1)
22897; PWR7-NEXT:    ld 4, -32(1)
22898; PWR7-NEXT:    popcntd 3, 3
22899; PWR7-NEXT:    popcntd 4, 4
22900; PWR7-NEXT:    cmpldi 3, 42
22901; PWR7-NEXT:    iselgt 3, 6, 5
22902; PWR7-NEXT:    cmpldi 4, 42
22903; PWR7-NEXT:    iselgt 4, 6, 5
22904; PWR7-NEXT:    std 3, -8(1)
22905; PWR7-NEXT:    addi 3, 1, -16
22906; PWR7-NEXT:    std 4, -16(1)
22907; PWR7-NEXT:    lxvd2x 34, 0, 3
22908; PWR7-NEXT:    blr
22909;
22910; PWR8-LABEL: ugt_42_v2i64:
22911; PWR8:       # %bb.0:
22912; PWR8-NEXT:    addis 3, 2, .LCPI182_0@toc@ha
22913; PWR8-NEXT:    vpopcntd 2, 2
22914; PWR8-NEXT:    addi 3, 3, .LCPI182_0@toc@l
22915; PWR8-NEXT:    lxvd2x 35, 0, 3
22916; PWR8-NEXT:    vcmpgtud 2, 2, 3
22917; PWR8-NEXT:    blr
22918;
22919; PWR9-LABEL: ugt_42_v2i64:
22920; PWR9:       # %bb.0:
22921; PWR9-NEXT:    addis 3, 2, .LCPI182_0@toc@ha
22922; PWR9-NEXT:    vpopcntd 2, 2
22923; PWR9-NEXT:    addi 3, 3, .LCPI182_0@toc@l
22924; PWR9-NEXT:    lxvx 35, 0, 3
22925; PWR9-NEXT:    vcmpgtud 2, 2, 3
22926; PWR9-NEXT:    blr
22927  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
22928  %3 = icmp ugt <2 x i64> %2, <i64 42, i64 42>
22929  %4 = sext <2 x i1> %3 to <2 x i64>
22930  ret <2 x i64> %4
22931}
22932
22933define <2 x i64> @ult_43_v2i64(<2 x i64> %0) {
22934; PWR5-LABEL: ult_43_v2i64:
22935; PWR5:       # %bb.0:
22936; PWR5-NEXT:    lis 5, 21845
22937; PWR5-NEXT:    lis 6, 13107
22938; PWR5-NEXT:    ori 5, 5, 21845
22939; PWR5-NEXT:    rotldi 8, 4, 63
22940; PWR5-NEXT:    rotldi 9, 3, 63
22941; PWR5-NEXT:    rldimi 5, 5, 32, 0
22942; PWR5-NEXT:    and 8, 8, 5
22943; PWR5-NEXT:    and 5, 9, 5
22944; PWR5-NEXT:    ori 6, 6, 13107
22945; PWR5-NEXT:    sub 3, 3, 5
22946; PWR5-NEXT:    rldimi 6, 6, 32, 0
22947; PWR5-NEXT:    sub 4, 4, 8
22948; PWR5-NEXT:    and 8, 3, 6
22949; PWR5-NEXT:    rotldi 3, 3, 62
22950; PWR5-NEXT:    and 3, 3, 6
22951; PWR5-NEXT:    lis 7, 3855
22952; PWR5-NEXT:    and 5, 4, 6
22953; PWR5-NEXT:    rotldi 4, 4, 62
22954; PWR5-NEXT:    add 3, 8, 3
22955; PWR5-NEXT:    lis 9, 257
22956; PWR5-NEXT:    ori 7, 7, 3855
22957; PWR5-NEXT:    and 4, 4, 6
22958; PWR5-NEXT:    rldicl 6, 3, 60, 4
22959; PWR5-NEXT:    ori 9, 9, 257
22960; PWR5-NEXT:    rldimi 7, 7, 32, 0
22961; PWR5-NEXT:    add 4, 5, 4
22962; PWR5-NEXT:    add 3, 3, 6
22963; PWR5-NEXT:    rldimi 9, 9, 32, 0
22964; PWR5-NEXT:    rldicl 5, 4, 60, 4
22965; PWR5-NEXT:    and 3, 3, 7
22966; PWR5-NEXT:    add 4, 4, 5
22967; PWR5-NEXT:    mulld 3, 3, 9
22968; PWR5-NEXT:    and 4, 4, 7
22969; PWR5-NEXT:    rldicl 3, 3, 8, 56
22970; PWR5-NEXT:    li 5, 43
22971; PWR5-NEXT:    mulld 4, 4, 9
22972; PWR5-NEXT:    subc 6, 3, 5
22973; PWR5-NEXT:    rldicl 4, 4, 8, 56
22974; PWR5-NEXT:    subfe 3, 3, 3
22975; PWR5-NEXT:    subc 5, 4, 5
22976; PWR5-NEXT:    subfe 4, 4, 4
22977; PWR5-NEXT:    blr
22978;
22979; PWR6-LABEL: ult_43_v2i64:
22980; PWR6:       # %bb.0:
22981; PWR6-NEXT:    lis 5, 21845
22982; PWR6-NEXT:    lis 6, 13107
22983; PWR6-NEXT:    ori 5, 5, 21845
22984; PWR6-NEXT:    rotldi 8, 4, 63
22985; PWR6-NEXT:    rotldi 9, 3, 63
22986; PWR6-NEXT:    rldimi 5, 5, 32, 0
22987; PWR6-NEXT:    and 8, 8, 5
22988; PWR6-NEXT:    and 5, 9, 5
22989; PWR6-NEXT:    ori 6, 6, 13107
22990; PWR6-NEXT:    sub 3, 3, 5
22991; PWR6-NEXT:    rldimi 6, 6, 32, 0
22992; PWR6-NEXT:    sub 4, 4, 8
22993; PWR6-NEXT:    and 8, 3, 6
22994; PWR6-NEXT:    rotldi 3, 3, 62
22995; PWR6-NEXT:    and 3, 3, 6
22996; PWR6-NEXT:    lis 7, 3855
22997; PWR6-NEXT:    and 5, 4, 6
22998; PWR6-NEXT:    rotldi 4, 4, 62
22999; PWR6-NEXT:    add 3, 8, 3
23000; PWR6-NEXT:    lis 9, 257
23001; PWR6-NEXT:    ori 7, 7, 3855
23002; PWR6-NEXT:    and 4, 4, 6
23003; PWR6-NEXT:    rldicl 6, 3, 60, 4
23004; PWR6-NEXT:    ori 9, 9, 257
23005; PWR6-NEXT:    rldimi 7, 7, 32, 0
23006; PWR6-NEXT:    add 4, 5, 4
23007; PWR6-NEXT:    add 3, 3, 6
23008; PWR6-NEXT:    rldimi 9, 9, 32, 0
23009; PWR6-NEXT:    rldicl 5, 4, 60, 4
23010; PWR6-NEXT:    and 3, 3, 7
23011; PWR6-NEXT:    add 4, 4, 5
23012; PWR6-NEXT:    mulld 3, 3, 9
23013; PWR6-NEXT:    and 4, 4, 7
23014; PWR6-NEXT:    rldicl 3, 3, 8, 56
23015; PWR6-NEXT:    li 5, 43
23016; PWR6-NEXT:    mulld 4, 4, 9
23017; PWR6-NEXT:    subc 6, 3, 5
23018; PWR6-NEXT:    rldicl 4, 4, 8, 56
23019; PWR6-NEXT:    subfe 3, 3, 3
23020; PWR6-NEXT:    subc 5, 4, 5
23021; PWR6-NEXT:    subfe 4, 4, 4
23022; PWR6-NEXT:    blr
23023;
23024; PWR7-LABEL: ult_43_v2i64:
23025; PWR7:       # %bb.0:
23026; PWR7-NEXT:    addi 3, 1, -32
23027; PWR7-NEXT:    li 5, 0
23028; PWR7-NEXT:    li 6, -1
23029; PWR7-NEXT:    stxvd2x 34, 0, 3
23030; PWR7-NEXT:    ld 3, -24(1)
23031; PWR7-NEXT:    ld 4, -32(1)
23032; PWR7-NEXT:    popcntd 3, 3
23033; PWR7-NEXT:    popcntd 4, 4
23034; PWR7-NEXT:    cmpldi 3, 43
23035; PWR7-NEXT:    isellt 3, 6, 5
23036; PWR7-NEXT:    cmpldi 4, 43
23037; PWR7-NEXT:    isellt 4, 6, 5
23038; PWR7-NEXT:    std 3, -8(1)
23039; PWR7-NEXT:    addi 3, 1, -16
23040; PWR7-NEXT:    std 4, -16(1)
23041; PWR7-NEXT:    lxvd2x 34, 0, 3
23042; PWR7-NEXT:    blr
23043;
23044; PWR8-LABEL: ult_43_v2i64:
23045; PWR8:       # %bb.0:
23046; PWR8-NEXT:    addis 3, 2, .LCPI183_0@toc@ha
23047; PWR8-NEXT:    vpopcntd 2, 2
23048; PWR8-NEXT:    addi 3, 3, .LCPI183_0@toc@l
23049; PWR8-NEXT:    lxvd2x 35, 0, 3
23050; PWR8-NEXT:    vcmpgtud 2, 3, 2
23051; PWR8-NEXT:    blr
23052;
23053; PWR9-LABEL: ult_43_v2i64:
23054; PWR9:       # %bb.0:
23055; PWR9-NEXT:    addis 3, 2, .LCPI183_0@toc@ha
23056; PWR9-NEXT:    vpopcntd 2, 2
23057; PWR9-NEXT:    addi 3, 3, .LCPI183_0@toc@l
23058; PWR9-NEXT:    lxvx 35, 0, 3
23059; PWR9-NEXT:    vcmpgtud 2, 3, 2
23060; PWR9-NEXT:    blr
23061  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23062  %3 = icmp ult <2 x i64> %2, <i64 43, i64 43>
23063  %4 = sext <2 x i1> %3 to <2 x i64>
23064  ret <2 x i64> %4
23065}
23066
23067define <2 x i64> @ugt_43_v2i64(<2 x i64> %0) {
23068; PWR5-LABEL: ugt_43_v2i64:
23069; PWR5:       # %bb.0:
23070; PWR5-NEXT:    lis 5, 21845
23071; PWR5-NEXT:    lis 6, 13107
23072; PWR5-NEXT:    ori 5, 5, 21845
23073; PWR5-NEXT:    rotldi 8, 4, 63
23074; PWR5-NEXT:    rotldi 9, 3, 63
23075; PWR5-NEXT:    rldimi 5, 5, 32, 0
23076; PWR5-NEXT:    and 8, 8, 5
23077; PWR5-NEXT:    and 5, 9, 5
23078; PWR5-NEXT:    ori 6, 6, 13107
23079; PWR5-NEXT:    sub 3, 3, 5
23080; PWR5-NEXT:    rldimi 6, 6, 32, 0
23081; PWR5-NEXT:    sub 4, 4, 8
23082; PWR5-NEXT:    and 8, 3, 6
23083; PWR5-NEXT:    rotldi 3, 3, 62
23084; PWR5-NEXT:    and 3, 3, 6
23085; PWR5-NEXT:    lis 7, 3855
23086; PWR5-NEXT:    and 5, 4, 6
23087; PWR5-NEXT:    rotldi 4, 4, 62
23088; PWR5-NEXT:    add 3, 8, 3
23089; PWR5-NEXT:    lis 9, 257
23090; PWR5-NEXT:    ori 7, 7, 3855
23091; PWR5-NEXT:    and 4, 4, 6
23092; PWR5-NEXT:    rldicl 6, 3, 60, 4
23093; PWR5-NEXT:    ori 9, 9, 257
23094; PWR5-NEXT:    rldimi 7, 7, 32, 0
23095; PWR5-NEXT:    add 4, 5, 4
23096; PWR5-NEXT:    add 3, 3, 6
23097; PWR5-NEXT:    rldimi 9, 9, 32, 0
23098; PWR5-NEXT:    rldicl 5, 4, 60, 4
23099; PWR5-NEXT:    and 3, 3, 7
23100; PWR5-NEXT:    add 4, 4, 5
23101; PWR5-NEXT:    mulld 3, 3, 9
23102; PWR5-NEXT:    and 4, 4, 7
23103; PWR5-NEXT:    rldicl 3, 3, 8, 56
23104; PWR5-NEXT:    mulld 4, 4, 9
23105; PWR5-NEXT:    li 5, 43
23106; PWR5-NEXT:    subfic 3, 3, 43
23107; PWR5-NEXT:    rldicl 4, 4, 8, 56
23108; PWR5-NEXT:    subfe 3, 5, 5
23109; PWR5-NEXT:    subfic 4, 4, 43
23110; PWR5-NEXT:    subfe 4, 5, 5
23111; PWR5-NEXT:    blr
23112;
23113; PWR6-LABEL: ugt_43_v2i64:
23114; PWR6:       # %bb.0:
23115; PWR6-NEXT:    lis 5, 21845
23116; PWR6-NEXT:    lis 6, 13107
23117; PWR6-NEXT:    ori 5, 5, 21845
23118; PWR6-NEXT:    rotldi 8, 4, 63
23119; PWR6-NEXT:    rotldi 9, 3, 63
23120; PWR6-NEXT:    rldimi 5, 5, 32, 0
23121; PWR6-NEXT:    and 8, 8, 5
23122; PWR6-NEXT:    and 5, 9, 5
23123; PWR6-NEXT:    ori 6, 6, 13107
23124; PWR6-NEXT:    sub 3, 3, 5
23125; PWR6-NEXT:    rldimi 6, 6, 32, 0
23126; PWR6-NEXT:    sub 4, 4, 8
23127; PWR6-NEXT:    and 8, 3, 6
23128; PWR6-NEXT:    rotldi 3, 3, 62
23129; PWR6-NEXT:    and 3, 3, 6
23130; PWR6-NEXT:    lis 7, 3855
23131; PWR6-NEXT:    and 5, 4, 6
23132; PWR6-NEXT:    rotldi 4, 4, 62
23133; PWR6-NEXT:    add 3, 8, 3
23134; PWR6-NEXT:    lis 9, 257
23135; PWR6-NEXT:    ori 7, 7, 3855
23136; PWR6-NEXT:    and 4, 4, 6
23137; PWR6-NEXT:    rldicl 6, 3, 60, 4
23138; PWR6-NEXT:    ori 9, 9, 257
23139; PWR6-NEXT:    rldimi 7, 7, 32, 0
23140; PWR6-NEXT:    add 4, 5, 4
23141; PWR6-NEXT:    add 3, 3, 6
23142; PWR6-NEXT:    rldimi 9, 9, 32, 0
23143; PWR6-NEXT:    rldicl 5, 4, 60, 4
23144; PWR6-NEXT:    and 3, 3, 7
23145; PWR6-NEXT:    add 4, 4, 5
23146; PWR6-NEXT:    mulld 3, 3, 9
23147; PWR6-NEXT:    and 4, 4, 7
23148; PWR6-NEXT:    rldicl 3, 3, 8, 56
23149; PWR6-NEXT:    mulld 4, 4, 9
23150; PWR6-NEXT:    li 5, 43
23151; PWR6-NEXT:    subfic 3, 3, 43
23152; PWR6-NEXT:    rldicl 4, 4, 8, 56
23153; PWR6-NEXT:    subfe 3, 5, 5
23154; PWR6-NEXT:    subfic 4, 4, 43
23155; PWR6-NEXT:    subfe 4, 5, 5
23156; PWR6-NEXT:    blr
23157;
23158; PWR7-LABEL: ugt_43_v2i64:
23159; PWR7:       # %bb.0:
23160; PWR7-NEXT:    addi 3, 1, -32
23161; PWR7-NEXT:    li 5, 0
23162; PWR7-NEXT:    li 6, -1
23163; PWR7-NEXT:    stxvd2x 34, 0, 3
23164; PWR7-NEXT:    ld 3, -24(1)
23165; PWR7-NEXT:    ld 4, -32(1)
23166; PWR7-NEXT:    popcntd 3, 3
23167; PWR7-NEXT:    popcntd 4, 4
23168; PWR7-NEXT:    cmpldi 3, 43
23169; PWR7-NEXT:    iselgt 3, 6, 5
23170; PWR7-NEXT:    cmpldi 4, 43
23171; PWR7-NEXT:    iselgt 4, 6, 5
23172; PWR7-NEXT:    std 3, -8(1)
23173; PWR7-NEXT:    addi 3, 1, -16
23174; PWR7-NEXT:    std 4, -16(1)
23175; PWR7-NEXT:    lxvd2x 34, 0, 3
23176; PWR7-NEXT:    blr
23177;
23178; PWR8-LABEL: ugt_43_v2i64:
23179; PWR8:       # %bb.0:
23180; PWR8-NEXT:    addis 3, 2, .LCPI184_0@toc@ha
23181; PWR8-NEXT:    vpopcntd 2, 2
23182; PWR8-NEXT:    addi 3, 3, .LCPI184_0@toc@l
23183; PWR8-NEXT:    lxvd2x 35, 0, 3
23184; PWR8-NEXT:    vcmpgtud 2, 2, 3
23185; PWR8-NEXT:    blr
23186;
23187; PWR9-LABEL: ugt_43_v2i64:
23188; PWR9:       # %bb.0:
23189; PWR9-NEXT:    addis 3, 2, .LCPI184_0@toc@ha
23190; PWR9-NEXT:    vpopcntd 2, 2
23191; PWR9-NEXT:    addi 3, 3, .LCPI184_0@toc@l
23192; PWR9-NEXT:    lxvx 35, 0, 3
23193; PWR9-NEXT:    vcmpgtud 2, 2, 3
23194; PWR9-NEXT:    blr
23195  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23196  %3 = icmp ugt <2 x i64> %2, <i64 43, i64 43>
23197  %4 = sext <2 x i1> %3 to <2 x i64>
23198  ret <2 x i64> %4
23199}
23200
23201define <2 x i64> @ult_44_v2i64(<2 x i64> %0) {
23202; PWR5-LABEL: ult_44_v2i64:
23203; PWR5:       # %bb.0:
23204; PWR5-NEXT:    lis 5, 21845
23205; PWR5-NEXT:    lis 6, 13107
23206; PWR5-NEXT:    ori 5, 5, 21845
23207; PWR5-NEXT:    rotldi 8, 4, 63
23208; PWR5-NEXT:    rotldi 9, 3, 63
23209; PWR5-NEXT:    rldimi 5, 5, 32, 0
23210; PWR5-NEXT:    and 8, 8, 5
23211; PWR5-NEXT:    and 5, 9, 5
23212; PWR5-NEXT:    ori 6, 6, 13107
23213; PWR5-NEXT:    sub 3, 3, 5
23214; PWR5-NEXT:    rldimi 6, 6, 32, 0
23215; PWR5-NEXT:    sub 4, 4, 8
23216; PWR5-NEXT:    and 8, 3, 6
23217; PWR5-NEXT:    rotldi 3, 3, 62
23218; PWR5-NEXT:    and 3, 3, 6
23219; PWR5-NEXT:    lis 7, 3855
23220; PWR5-NEXT:    and 5, 4, 6
23221; PWR5-NEXT:    rotldi 4, 4, 62
23222; PWR5-NEXT:    add 3, 8, 3
23223; PWR5-NEXT:    lis 9, 257
23224; PWR5-NEXT:    ori 7, 7, 3855
23225; PWR5-NEXT:    and 4, 4, 6
23226; PWR5-NEXT:    rldicl 6, 3, 60, 4
23227; PWR5-NEXT:    ori 9, 9, 257
23228; PWR5-NEXT:    rldimi 7, 7, 32, 0
23229; PWR5-NEXT:    add 4, 5, 4
23230; PWR5-NEXT:    add 3, 3, 6
23231; PWR5-NEXT:    rldimi 9, 9, 32, 0
23232; PWR5-NEXT:    rldicl 5, 4, 60, 4
23233; PWR5-NEXT:    and 3, 3, 7
23234; PWR5-NEXT:    add 4, 4, 5
23235; PWR5-NEXT:    mulld 3, 3, 9
23236; PWR5-NEXT:    and 4, 4, 7
23237; PWR5-NEXT:    rldicl 3, 3, 8, 56
23238; PWR5-NEXT:    li 5, 44
23239; PWR5-NEXT:    mulld 4, 4, 9
23240; PWR5-NEXT:    subc 6, 3, 5
23241; PWR5-NEXT:    rldicl 4, 4, 8, 56
23242; PWR5-NEXT:    subfe 3, 3, 3
23243; PWR5-NEXT:    subc 5, 4, 5
23244; PWR5-NEXT:    subfe 4, 4, 4
23245; PWR5-NEXT:    blr
23246;
23247; PWR6-LABEL: ult_44_v2i64:
23248; PWR6:       # %bb.0:
23249; PWR6-NEXT:    lis 5, 21845
23250; PWR6-NEXT:    lis 6, 13107
23251; PWR6-NEXT:    ori 5, 5, 21845
23252; PWR6-NEXT:    rotldi 8, 4, 63
23253; PWR6-NEXT:    rotldi 9, 3, 63
23254; PWR6-NEXT:    rldimi 5, 5, 32, 0
23255; PWR6-NEXT:    and 8, 8, 5
23256; PWR6-NEXT:    and 5, 9, 5
23257; PWR6-NEXT:    ori 6, 6, 13107
23258; PWR6-NEXT:    sub 3, 3, 5
23259; PWR6-NEXT:    rldimi 6, 6, 32, 0
23260; PWR6-NEXT:    sub 4, 4, 8
23261; PWR6-NEXT:    and 8, 3, 6
23262; PWR6-NEXT:    rotldi 3, 3, 62
23263; PWR6-NEXT:    and 3, 3, 6
23264; PWR6-NEXT:    lis 7, 3855
23265; PWR6-NEXT:    and 5, 4, 6
23266; PWR6-NEXT:    rotldi 4, 4, 62
23267; PWR6-NEXT:    add 3, 8, 3
23268; PWR6-NEXT:    lis 9, 257
23269; PWR6-NEXT:    ori 7, 7, 3855
23270; PWR6-NEXT:    and 4, 4, 6
23271; PWR6-NEXT:    rldicl 6, 3, 60, 4
23272; PWR6-NEXT:    ori 9, 9, 257
23273; PWR6-NEXT:    rldimi 7, 7, 32, 0
23274; PWR6-NEXT:    add 4, 5, 4
23275; PWR6-NEXT:    add 3, 3, 6
23276; PWR6-NEXT:    rldimi 9, 9, 32, 0
23277; PWR6-NEXT:    rldicl 5, 4, 60, 4
23278; PWR6-NEXT:    and 3, 3, 7
23279; PWR6-NEXT:    add 4, 4, 5
23280; PWR6-NEXT:    mulld 3, 3, 9
23281; PWR6-NEXT:    and 4, 4, 7
23282; PWR6-NEXT:    rldicl 3, 3, 8, 56
23283; PWR6-NEXT:    li 5, 44
23284; PWR6-NEXT:    mulld 4, 4, 9
23285; PWR6-NEXT:    subc 6, 3, 5
23286; PWR6-NEXT:    rldicl 4, 4, 8, 56
23287; PWR6-NEXT:    subfe 3, 3, 3
23288; PWR6-NEXT:    subc 5, 4, 5
23289; PWR6-NEXT:    subfe 4, 4, 4
23290; PWR6-NEXT:    blr
23291;
23292; PWR7-LABEL: ult_44_v2i64:
23293; PWR7:       # %bb.0:
23294; PWR7-NEXT:    addi 3, 1, -32
23295; PWR7-NEXT:    li 5, 0
23296; PWR7-NEXT:    li 6, -1
23297; PWR7-NEXT:    stxvd2x 34, 0, 3
23298; PWR7-NEXT:    ld 3, -24(1)
23299; PWR7-NEXT:    ld 4, -32(1)
23300; PWR7-NEXT:    popcntd 3, 3
23301; PWR7-NEXT:    popcntd 4, 4
23302; PWR7-NEXT:    cmpldi 3, 44
23303; PWR7-NEXT:    isellt 3, 6, 5
23304; PWR7-NEXT:    cmpldi 4, 44
23305; PWR7-NEXT:    isellt 4, 6, 5
23306; PWR7-NEXT:    std 3, -8(1)
23307; PWR7-NEXT:    addi 3, 1, -16
23308; PWR7-NEXT:    std 4, -16(1)
23309; PWR7-NEXT:    lxvd2x 34, 0, 3
23310; PWR7-NEXT:    blr
23311;
23312; PWR8-LABEL: ult_44_v2i64:
23313; PWR8:       # %bb.0:
23314; PWR8-NEXT:    addis 3, 2, .LCPI185_0@toc@ha
23315; PWR8-NEXT:    vpopcntd 2, 2
23316; PWR8-NEXT:    addi 3, 3, .LCPI185_0@toc@l
23317; PWR8-NEXT:    lxvd2x 35, 0, 3
23318; PWR8-NEXT:    vcmpgtud 2, 3, 2
23319; PWR8-NEXT:    blr
23320;
23321; PWR9-LABEL: ult_44_v2i64:
23322; PWR9:       # %bb.0:
23323; PWR9-NEXT:    addis 3, 2, .LCPI185_0@toc@ha
23324; PWR9-NEXT:    vpopcntd 2, 2
23325; PWR9-NEXT:    addi 3, 3, .LCPI185_0@toc@l
23326; PWR9-NEXT:    lxvx 35, 0, 3
23327; PWR9-NEXT:    vcmpgtud 2, 3, 2
23328; PWR9-NEXT:    blr
23329  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23330  %3 = icmp ult <2 x i64> %2, <i64 44, i64 44>
23331  %4 = sext <2 x i1> %3 to <2 x i64>
23332  ret <2 x i64> %4
23333}
23334
23335define <2 x i64> @ugt_44_v2i64(<2 x i64> %0) {
23336; PWR5-LABEL: ugt_44_v2i64:
23337; PWR5:       # %bb.0:
23338; PWR5-NEXT:    lis 5, 21845
23339; PWR5-NEXT:    lis 6, 13107
23340; PWR5-NEXT:    ori 5, 5, 21845
23341; PWR5-NEXT:    rotldi 8, 4, 63
23342; PWR5-NEXT:    rotldi 9, 3, 63
23343; PWR5-NEXT:    rldimi 5, 5, 32, 0
23344; PWR5-NEXT:    and 8, 8, 5
23345; PWR5-NEXT:    and 5, 9, 5
23346; PWR5-NEXT:    ori 6, 6, 13107
23347; PWR5-NEXT:    sub 3, 3, 5
23348; PWR5-NEXT:    rldimi 6, 6, 32, 0
23349; PWR5-NEXT:    sub 4, 4, 8
23350; PWR5-NEXT:    and 8, 3, 6
23351; PWR5-NEXT:    rotldi 3, 3, 62
23352; PWR5-NEXT:    and 3, 3, 6
23353; PWR5-NEXT:    lis 7, 3855
23354; PWR5-NEXT:    and 5, 4, 6
23355; PWR5-NEXT:    rotldi 4, 4, 62
23356; PWR5-NEXT:    add 3, 8, 3
23357; PWR5-NEXT:    lis 9, 257
23358; PWR5-NEXT:    ori 7, 7, 3855
23359; PWR5-NEXT:    and 4, 4, 6
23360; PWR5-NEXT:    rldicl 6, 3, 60, 4
23361; PWR5-NEXT:    ori 9, 9, 257
23362; PWR5-NEXT:    rldimi 7, 7, 32, 0
23363; PWR5-NEXT:    add 4, 5, 4
23364; PWR5-NEXT:    add 3, 3, 6
23365; PWR5-NEXT:    rldimi 9, 9, 32, 0
23366; PWR5-NEXT:    rldicl 5, 4, 60, 4
23367; PWR5-NEXT:    and 3, 3, 7
23368; PWR5-NEXT:    add 4, 4, 5
23369; PWR5-NEXT:    mulld 3, 3, 9
23370; PWR5-NEXT:    and 4, 4, 7
23371; PWR5-NEXT:    rldicl 3, 3, 8, 56
23372; PWR5-NEXT:    mulld 4, 4, 9
23373; PWR5-NEXT:    li 5, 44
23374; PWR5-NEXT:    subfic 3, 3, 44
23375; PWR5-NEXT:    rldicl 4, 4, 8, 56
23376; PWR5-NEXT:    subfe 3, 5, 5
23377; PWR5-NEXT:    subfic 4, 4, 44
23378; PWR5-NEXT:    subfe 4, 5, 5
23379; PWR5-NEXT:    blr
23380;
23381; PWR6-LABEL: ugt_44_v2i64:
23382; PWR6:       # %bb.0:
23383; PWR6-NEXT:    lis 5, 21845
23384; PWR6-NEXT:    lis 6, 13107
23385; PWR6-NEXT:    ori 5, 5, 21845
23386; PWR6-NEXT:    rotldi 8, 4, 63
23387; PWR6-NEXT:    rotldi 9, 3, 63
23388; PWR6-NEXT:    rldimi 5, 5, 32, 0
23389; PWR6-NEXT:    and 8, 8, 5
23390; PWR6-NEXT:    and 5, 9, 5
23391; PWR6-NEXT:    ori 6, 6, 13107
23392; PWR6-NEXT:    sub 3, 3, 5
23393; PWR6-NEXT:    rldimi 6, 6, 32, 0
23394; PWR6-NEXT:    sub 4, 4, 8
23395; PWR6-NEXT:    and 8, 3, 6
23396; PWR6-NEXT:    rotldi 3, 3, 62
23397; PWR6-NEXT:    and 3, 3, 6
23398; PWR6-NEXT:    lis 7, 3855
23399; PWR6-NEXT:    and 5, 4, 6
23400; PWR6-NEXT:    rotldi 4, 4, 62
23401; PWR6-NEXT:    add 3, 8, 3
23402; PWR6-NEXT:    lis 9, 257
23403; PWR6-NEXT:    ori 7, 7, 3855
23404; PWR6-NEXT:    and 4, 4, 6
23405; PWR6-NEXT:    rldicl 6, 3, 60, 4
23406; PWR6-NEXT:    ori 9, 9, 257
23407; PWR6-NEXT:    rldimi 7, 7, 32, 0
23408; PWR6-NEXT:    add 4, 5, 4
23409; PWR6-NEXT:    add 3, 3, 6
23410; PWR6-NEXT:    rldimi 9, 9, 32, 0
23411; PWR6-NEXT:    rldicl 5, 4, 60, 4
23412; PWR6-NEXT:    and 3, 3, 7
23413; PWR6-NEXT:    add 4, 4, 5
23414; PWR6-NEXT:    mulld 3, 3, 9
23415; PWR6-NEXT:    and 4, 4, 7
23416; PWR6-NEXT:    rldicl 3, 3, 8, 56
23417; PWR6-NEXT:    mulld 4, 4, 9
23418; PWR6-NEXT:    li 5, 44
23419; PWR6-NEXT:    subfic 3, 3, 44
23420; PWR6-NEXT:    rldicl 4, 4, 8, 56
23421; PWR6-NEXT:    subfe 3, 5, 5
23422; PWR6-NEXT:    subfic 4, 4, 44
23423; PWR6-NEXT:    subfe 4, 5, 5
23424; PWR6-NEXT:    blr
23425;
23426; PWR7-LABEL: ugt_44_v2i64:
23427; PWR7:       # %bb.0:
23428; PWR7-NEXT:    addi 3, 1, -32
23429; PWR7-NEXT:    li 5, 0
23430; PWR7-NEXT:    li 6, -1
23431; PWR7-NEXT:    stxvd2x 34, 0, 3
23432; PWR7-NEXT:    ld 3, -24(1)
23433; PWR7-NEXT:    ld 4, -32(1)
23434; PWR7-NEXT:    popcntd 3, 3
23435; PWR7-NEXT:    popcntd 4, 4
23436; PWR7-NEXT:    cmpldi 3, 44
23437; PWR7-NEXT:    iselgt 3, 6, 5
23438; PWR7-NEXT:    cmpldi 4, 44
23439; PWR7-NEXT:    iselgt 4, 6, 5
23440; PWR7-NEXT:    std 3, -8(1)
23441; PWR7-NEXT:    addi 3, 1, -16
23442; PWR7-NEXT:    std 4, -16(1)
23443; PWR7-NEXT:    lxvd2x 34, 0, 3
23444; PWR7-NEXT:    blr
23445;
23446; PWR8-LABEL: ugt_44_v2i64:
23447; PWR8:       # %bb.0:
23448; PWR8-NEXT:    addis 3, 2, .LCPI186_0@toc@ha
23449; PWR8-NEXT:    vpopcntd 2, 2
23450; PWR8-NEXT:    addi 3, 3, .LCPI186_0@toc@l
23451; PWR8-NEXT:    lxvd2x 35, 0, 3
23452; PWR8-NEXT:    vcmpgtud 2, 2, 3
23453; PWR8-NEXT:    blr
23454;
23455; PWR9-LABEL: ugt_44_v2i64:
23456; PWR9:       # %bb.0:
23457; PWR9-NEXT:    addis 3, 2, .LCPI186_0@toc@ha
23458; PWR9-NEXT:    vpopcntd 2, 2
23459; PWR9-NEXT:    addi 3, 3, .LCPI186_0@toc@l
23460; PWR9-NEXT:    lxvx 35, 0, 3
23461; PWR9-NEXT:    vcmpgtud 2, 2, 3
23462; PWR9-NEXT:    blr
23463  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23464  %3 = icmp ugt <2 x i64> %2, <i64 44, i64 44>
23465  %4 = sext <2 x i1> %3 to <2 x i64>
23466  ret <2 x i64> %4
23467}
23468
23469define <2 x i64> @ult_45_v2i64(<2 x i64> %0) {
23470; PWR5-LABEL: ult_45_v2i64:
23471; PWR5:       # %bb.0:
23472; PWR5-NEXT:    lis 5, 21845
23473; PWR5-NEXT:    lis 6, 13107
23474; PWR5-NEXT:    ori 5, 5, 21845
23475; PWR5-NEXT:    rotldi 8, 4, 63
23476; PWR5-NEXT:    rotldi 9, 3, 63
23477; PWR5-NEXT:    rldimi 5, 5, 32, 0
23478; PWR5-NEXT:    and 8, 8, 5
23479; PWR5-NEXT:    and 5, 9, 5
23480; PWR5-NEXT:    ori 6, 6, 13107
23481; PWR5-NEXT:    sub 3, 3, 5
23482; PWR5-NEXT:    rldimi 6, 6, 32, 0
23483; PWR5-NEXT:    sub 4, 4, 8
23484; PWR5-NEXT:    and 8, 3, 6
23485; PWR5-NEXT:    rotldi 3, 3, 62
23486; PWR5-NEXT:    and 3, 3, 6
23487; PWR5-NEXT:    lis 7, 3855
23488; PWR5-NEXT:    and 5, 4, 6
23489; PWR5-NEXT:    rotldi 4, 4, 62
23490; PWR5-NEXT:    add 3, 8, 3
23491; PWR5-NEXT:    lis 9, 257
23492; PWR5-NEXT:    ori 7, 7, 3855
23493; PWR5-NEXT:    and 4, 4, 6
23494; PWR5-NEXT:    rldicl 6, 3, 60, 4
23495; PWR5-NEXT:    ori 9, 9, 257
23496; PWR5-NEXT:    rldimi 7, 7, 32, 0
23497; PWR5-NEXT:    add 4, 5, 4
23498; PWR5-NEXT:    add 3, 3, 6
23499; PWR5-NEXT:    rldimi 9, 9, 32, 0
23500; PWR5-NEXT:    rldicl 5, 4, 60, 4
23501; PWR5-NEXT:    and 3, 3, 7
23502; PWR5-NEXT:    add 4, 4, 5
23503; PWR5-NEXT:    mulld 3, 3, 9
23504; PWR5-NEXT:    and 4, 4, 7
23505; PWR5-NEXT:    rldicl 3, 3, 8, 56
23506; PWR5-NEXT:    li 5, 45
23507; PWR5-NEXT:    mulld 4, 4, 9
23508; PWR5-NEXT:    subc 6, 3, 5
23509; PWR5-NEXT:    rldicl 4, 4, 8, 56
23510; PWR5-NEXT:    subfe 3, 3, 3
23511; PWR5-NEXT:    subc 5, 4, 5
23512; PWR5-NEXT:    subfe 4, 4, 4
23513; PWR5-NEXT:    blr
23514;
23515; PWR6-LABEL: ult_45_v2i64:
23516; PWR6:       # %bb.0:
23517; PWR6-NEXT:    lis 5, 21845
23518; PWR6-NEXT:    lis 6, 13107
23519; PWR6-NEXT:    ori 5, 5, 21845
23520; PWR6-NEXT:    rotldi 8, 4, 63
23521; PWR6-NEXT:    rotldi 9, 3, 63
23522; PWR6-NEXT:    rldimi 5, 5, 32, 0
23523; PWR6-NEXT:    and 8, 8, 5
23524; PWR6-NEXT:    and 5, 9, 5
23525; PWR6-NEXT:    ori 6, 6, 13107
23526; PWR6-NEXT:    sub 3, 3, 5
23527; PWR6-NEXT:    rldimi 6, 6, 32, 0
23528; PWR6-NEXT:    sub 4, 4, 8
23529; PWR6-NEXT:    and 8, 3, 6
23530; PWR6-NEXT:    rotldi 3, 3, 62
23531; PWR6-NEXT:    and 3, 3, 6
23532; PWR6-NEXT:    lis 7, 3855
23533; PWR6-NEXT:    and 5, 4, 6
23534; PWR6-NEXT:    rotldi 4, 4, 62
23535; PWR6-NEXT:    add 3, 8, 3
23536; PWR6-NEXT:    lis 9, 257
23537; PWR6-NEXT:    ori 7, 7, 3855
23538; PWR6-NEXT:    and 4, 4, 6
23539; PWR6-NEXT:    rldicl 6, 3, 60, 4
23540; PWR6-NEXT:    ori 9, 9, 257
23541; PWR6-NEXT:    rldimi 7, 7, 32, 0
23542; PWR6-NEXT:    add 4, 5, 4
23543; PWR6-NEXT:    add 3, 3, 6
23544; PWR6-NEXT:    rldimi 9, 9, 32, 0
23545; PWR6-NEXT:    rldicl 5, 4, 60, 4
23546; PWR6-NEXT:    and 3, 3, 7
23547; PWR6-NEXT:    add 4, 4, 5
23548; PWR6-NEXT:    mulld 3, 3, 9
23549; PWR6-NEXT:    and 4, 4, 7
23550; PWR6-NEXT:    rldicl 3, 3, 8, 56
23551; PWR6-NEXT:    li 5, 45
23552; PWR6-NEXT:    mulld 4, 4, 9
23553; PWR6-NEXT:    subc 6, 3, 5
23554; PWR6-NEXT:    rldicl 4, 4, 8, 56
23555; PWR6-NEXT:    subfe 3, 3, 3
23556; PWR6-NEXT:    subc 5, 4, 5
23557; PWR6-NEXT:    subfe 4, 4, 4
23558; PWR6-NEXT:    blr
23559;
23560; PWR7-LABEL: ult_45_v2i64:
23561; PWR7:       # %bb.0:
23562; PWR7-NEXT:    addi 3, 1, -32
23563; PWR7-NEXT:    li 5, 0
23564; PWR7-NEXT:    li 6, -1
23565; PWR7-NEXT:    stxvd2x 34, 0, 3
23566; PWR7-NEXT:    ld 3, -24(1)
23567; PWR7-NEXT:    ld 4, -32(1)
23568; PWR7-NEXT:    popcntd 3, 3
23569; PWR7-NEXT:    popcntd 4, 4
23570; PWR7-NEXT:    cmpldi 3, 45
23571; PWR7-NEXT:    isellt 3, 6, 5
23572; PWR7-NEXT:    cmpldi 4, 45
23573; PWR7-NEXT:    isellt 4, 6, 5
23574; PWR7-NEXT:    std 3, -8(1)
23575; PWR7-NEXT:    addi 3, 1, -16
23576; PWR7-NEXT:    std 4, -16(1)
23577; PWR7-NEXT:    lxvd2x 34, 0, 3
23578; PWR7-NEXT:    blr
23579;
23580; PWR8-LABEL: ult_45_v2i64:
23581; PWR8:       # %bb.0:
23582; PWR8-NEXT:    addis 3, 2, .LCPI187_0@toc@ha
23583; PWR8-NEXT:    vpopcntd 2, 2
23584; PWR8-NEXT:    addi 3, 3, .LCPI187_0@toc@l
23585; PWR8-NEXT:    lxvd2x 35, 0, 3
23586; PWR8-NEXT:    vcmpgtud 2, 3, 2
23587; PWR8-NEXT:    blr
23588;
23589; PWR9-LABEL: ult_45_v2i64:
23590; PWR9:       # %bb.0:
23591; PWR9-NEXT:    addis 3, 2, .LCPI187_0@toc@ha
23592; PWR9-NEXT:    vpopcntd 2, 2
23593; PWR9-NEXT:    addi 3, 3, .LCPI187_0@toc@l
23594; PWR9-NEXT:    lxvx 35, 0, 3
23595; PWR9-NEXT:    vcmpgtud 2, 3, 2
23596; PWR9-NEXT:    blr
23597  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23598  %3 = icmp ult <2 x i64> %2, <i64 45, i64 45>
23599  %4 = sext <2 x i1> %3 to <2 x i64>
23600  ret <2 x i64> %4
23601}
23602
23603define <2 x i64> @ugt_45_v2i64(<2 x i64> %0) {
23604; PWR5-LABEL: ugt_45_v2i64:
23605; PWR5:       # %bb.0:
23606; PWR5-NEXT:    lis 5, 21845
23607; PWR5-NEXT:    lis 6, 13107
23608; PWR5-NEXT:    ori 5, 5, 21845
23609; PWR5-NEXT:    rotldi 8, 4, 63
23610; PWR5-NEXT:    rotldi 9, 3, 63
23611; PWR5-NEXT:    rldimi 5, 5, 32, 0
23612; PWR5-NEXT:    and 8, 8, 5
23613; PWR5-NEXT:    and 5, 9, 5
23614; PWR5-NEXT:    ori 6, 6, 13107
23615; PWR5-NEXT:    sub 3, 3, 5
23616; PWR5-NEXT:    rldimi 6, 6, 32, 0
23617; PWR5-NEXT:    sub 4, 4, 8
23618; PWR5-NEXT:    and 8, 3, 6
23619; PWR5-NEXT:    rotldi 3, 3, 62
23620; PWR5-NEXT:    and 3, 3, 6
23621; PWR5-NEXT:    lis 7, 3855
23622; PWR5-NEXT:    and 5, 4, 6
23623; PWR5-NEXT:    rotldi 4, 4, 62
23624; PWR5-NEXT:    add 3, 8, 3
23625; PWR5-NEXT:    lis 9, 257
23626; PWR5-NEXT:    ori 7, 7, 3855
23627; PWR5-NEXT:    and 4, 4, 6
23628; PWR5-NEXT:    rldicl 6, 3, 60, 4
23629; PWR5-NEXT:    ori 9, 9, 257
23630; PWR5-NEXT:    rldimi 7, 7, 32, 0
23631; PWR5-NEXT:    add 4, 5, 4
23632; PWR5-NEXT:    add 3, 3, 6
23633; PWR5-NEXT:    rldimi 9, 9, 32, 0
23634; PWR5-NEXT:    rldicl 5, 4, 60, 4
23635; PWR5-NEXT:    and 3, 3, 7
23636; PWR5-NEXT:    add 4, 4, 5
23637; PWR5-NEXT:    mulld 3, 3, 9
23638; PWR5-NEXT:    and 4, 4, 7
23639; PWR5-NEXT:    rldicl 3, 3, 8, 56
23640; PWR5-NEXT:    mulld 4, 4, 9
23641; PWR5-NEXT:    li 5, 45
23642; PWR5-NEXT:    subfic 3, 3, 45
23643; PWR5-NEXT:    rldicl 4, 4, 8, 56
23644; PWR5-NEXT:    subfe 3, 5, 5
23645; PWR5-NEXT:    subfic 4, 4, 45
23646; PWR5-NEXT:    subfe 4, 5, 5
23647; PWR5-NEXT:    blr
23648;
23649; PWR6-LABEL: ugt_45_v2i64:
23650; PWR6:       # %bb.0:
23651; PWR6-NEXT:    lis 5, 21845
23652; PWR6-NEXT:    lis 6, 13107
23653; PWR6-NEXT:    ori 5, 5, 21845
23654; PWR6-NEXT:    rotldi 8, 4, 63
23655; PWR6-NEXT:    rotldi 9, 3, 63
23656; PWR6-NEXT:    rldimi 5, 5, 32, 0
23657; PWR6-NEXT:    and 8, 8, 5
23658; PWR6-NEXT:    and 5, 9, 5
23659; PWR6-NEXT:    ori 6, 6, 13107
23660; PWR6-NEXT:    sub 3, 3, 5
23661; PWR6-NEXT:    rldimi 6, 6, 32, 0
23662; PWR6-NEXT:    sub 4, 4, 8
23663; PWR6-NEXT:    and 8, 3, 6
23664; PWR6-NEXT:    rotldi 3, 3, 62
23665; PWR6-NEXT:    and 3, 3, 6
23666; PWR6-NEXT:    lis 7, 3855
23667; PWR6-NEXT:    and 5, 4, 6
23668; PWR6-NEXT:    rotldi 4, 4, 62
23669; PWR6-NEXT:    add 3, 8, 3
23670; PWR6-NEXT:    lis 9, 257
23671; PWR6-NEXT:    ori 7, 7, 3855
23672; PWR6-NEXT:    and 4, 4, 6
23673; PWR6-NEXT:    rldicl 6, 3, 60, 4
23674; PWR6-NEXT:    ori 9, 9, 257
23675; PWR6-NEXT:    rldimi 7, 7, 32, 0
23676; PWR6-NEXT:    add 4, 5, 4
23677; PWR6-NEXT:    add 3, 3, 6
23678; PWR6-NEXT:    rldimi 9, 9, 32, 0
23679; PWR6-NEXT:    rldicl 5, 4, 60, 4
23680; PWR6-NEXT:    and 3, 3, 7
23681; PWR6-NEXT:    add 4, 4, 5
23682; PWR6-NEXT:    mulld 3, 3, 9
23683; PWR6-NEXT:    and 4, 4, 7
23684; PWR6-NEXT:    rldicl 3, 3, 8, 56
23685; PWR6-NEXT:    mulld 4, 4, 9
23686; PWR6-NEXT:    li 5, 45
23687; PWR6-NEXT:    subfic 3, 3, 45
23688; PWR6-NEXT:    rldicl 4, 4, 8, 56
23689; PWR6-NEXT:    subfe 3, 5, 5
23690; PWR6-NEXT:    subfic 4, 4, 45
23691; PWR6-NEXT:    subfe 4, 5, 5
23692; PWR6-NEXT:    blr
23693;
23694; PWR7-LABEL: ugt_45_v2i64:
23695; PWR7:       # %bb.0:
23696; PWR7-NEXT:    addi 3, 1, -32
23697; PWR7-NEXT:    li 5, 0
23698; PWR7-NEXT:    li 6, -1
23699; PWR7-NEXT:    stxvd2x 34, 0, 3
23700; PWR7-NEXT:    ld 3, -24(1)
23701; PWR7-NEXT:    ld 4, -32(1)
23702; PWR7-NEXT:    popcntd 3, 3
23703; PWR7-NEXT:    popcntd 4, 4
23704; PWR7-NEXT:    cmpldi 3, 45
23705; PWR7-NEXT:    iselgt 3, 6, 5
23706; PWR7-NEXT:    cmpldi 4, 45
23707; PWR7-NEXT:    iselgt 4, 6, 5
23708; PWR7-NEXT:    std 3, -8(1)
23709; PWR7-NEXT:    addi 3, 1, -16
23710; PWR7-NEXT:    std 4, -16(1)
23711; PWR7-NEXT:    lxvd2x 34, 0, 3
23712; PWR7-NEXT:    blr
23713;
23714; PWR8-LABEL: ugt_45_v2i64:
23715; PWR8:       # %bb.0:
23716; PWR8-NEXT:    addis 3, 2, .LCPI188_0@toc@ha
23717; PWR8-NEXT:    vpopcntd 2, 2
23718; PWR8-NEXT:    addi 3, 3, .LCPI188_0@toc@l
23719; PWR8-NEXT:    lxvd2x 35, 0, 3
23720; PWR8-NEXT:    vcmpgtud 2, 2, 3
23721; PWR8-NEXT:    blr
23722;
23723; PWR9-LABEL: ugt_45_v2i64:
23724; PWR9:       # %bb.0:
23725; PWR9-NEXT:    addis 3, 2, .LCPI188_0@toc@ha
23726; PWR9-NEXT:    vpopcntd 2, 2
23727; PWR9-NEXT:    addi 3, 3, .LCPI188_0@toc@l
23728; PWR9-NEXT:    lxvx 35, 0, 3
23729; PWR9-NEXT:    vcmpgtud 2, 2, 3
23730; PWR9-NEXT:    blr
23731  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23732  %3 = icmp ugt <2 x i64> %2, <i64 45, i64 45>
23733  %4 = sext <2 x i1> %3 to <2 x i64>
23734  ret <2 x i64> %4
23735}
23736
23737define <2 x i64> @ult_46_v2i64(<2 x i64> %0) {
23738; PWR5-LABEL: ult_46_v2i64:
23739; PWR5:       # %bb.0:
23740; PWR5-NEXT:    lis 5, 21845
23741; PWR5-NEXT:    lis 6, 13107
23742; PWR5-NEXT:    ori 5, 5, 21845
23743; PWR5-NEXT:    rotldi 8, 4, 63
23744; PWR5-NEXT:    rotldi 9, 3, 63
23745; PWR5-NEXT:    rldimi 5, 5, 32, 0
23746; PWR5-NEXT:    and 8, 8, 5
23747; PWR5-NEXT:    and 5, 9, 5
23748; PWR5-NEXT:    ori 6, 6, 13107
23749; PWR5-NEXT:    sub 3, 3, 5
23750; PWR5-NEXT:    rldimi 6, 6, 32, 0
23751; PWR5-NEXT:    sub 4, 4, 8
23752; PWR5-NEXT:    and 8, 3, 6
23753; PWR5-NEXT:    rotldi 3, 3, 62
23754; PWR5-NEXT:    and 3, 3, 6
23755; PWR5-NEXT:    lis 7, 3855
23756; PWR5-NEXT:    and 5, 4, 6
23757; PWR5-NEXT:    rotldi 4, 4, 62
23758; PWR5-NEXT:    add 3, 8, 3
23759; PWR5-NEXT:    lis 9, 257
23760; PWR5-NEXT:    ori 7, 7, 3855
23761; PWR5-NEXT:    and 4, 4, 6
23762; PWR5-NEXT:    rldicl 6, 3, 60, 4
23763; PWR5-NEXT:    ori 9, 9, 257
23764; PWR5-NEXT:    rldimi 7, 7, 32, 0
23765; PWR5-NEXT:    add 4, 5, 4
23766; PWR5-NEXT:    add 3, 3, 6
23767; PWR5-NEXT:    rldimi 9, 9, 32, 0
23768; PWR5-NEXT:    rldicl 5, 4, 60, 4
23769; PWR5-NEXT:    and 3, 3, 7
23770; PWR5-NEXT:    add 4, 4, 5
23771; PWR5-NEXT:    mulld 3, 3, 9
23772; PWR5-NEXT:    and 4, 4, 7
23773; PWR5-NEXT:    rldicl 3, 3, 8, 56
23774; PWR5-NEXT:    li 5, 46
23775; PWR5-NEXT:    mulld 4, 4, 9
23776; PWR5-NEXT:    subc 6, 3, 5
23777; PWR5-NEXT:    rldicl 4, 4, 8, 56
23778; PWR5-NEXT:    subfe 3, 3, 3
23779; PWR5-NEXT:    subc 5, 4, 5
23780; PWR5-NEXT:    subfe 4, 4, 4
23781; PWR5-NEXT:    blr
23782;
23783; PWR6-LABEL: ult_46_v2i64:
23784; PWR6:       # %bb.0:
23785; PWR6-NEXT:    lis 5, 21845
23786; PWR6-NEXT:    lis 6, 13107
23787; PWR6-NEXT:    ori 5, 5, 21845
23788; PWR6-NEXT:    rotldi 8, 4, 63
23789; PWR6-NEXT:    rotldi 9, 3, 63
23790; PWR6-NEXT:    rldimi 5, 5, 32, 0
23791; PWR6-NEXT:    and 8, 8, 5
23792; PWR6-NEXT:    and 5, 9, 5
23793; PWR6-NEXT:    ori 6, 6, 13107
23794; PWR6-NEXT:    sub 3, 3, 5
23795; PWR6-NEXT:    rldimi 6, 6, 32, 0
23796; PWR6-NEXT:    sub 4, 4, 8
23797; PWR6-NEXT:    and 8, 3, 6
23798; PWR6-NEXT:    rotldi 3, 3, 62
23799; PWR6-NEXT:    and 3, 3, 6
23800; PWR6-NEXT:    lis 7, 3855
23801; PWR6-NEXT:    and 5, 4, 6
23802; PWR6-NEXT:    rotldi 4, 4, 62
23803; PWR6-NEXT:    add 3, 8, 3
23804; PWR6-NEXT:    lis 9, 257
23805; PWR6-NEXT:    ori 7, 7, 3855
23806; PWR6-NEXT:    and 4, 4, 6
23807; PWR6-NEXT:    rldicl 6, 3, 60, 4
23808; PWR6-NEXT:    ori 9, 9, 257
23809; PWR6-NEXT:    rldimi 7, 7, 32, 0
23810; PWR6-NEXT:    add 4, 5, 4
23811; PWR6-NEXT:    add 3, 3, 6
23812; PWR6-NEXT:    rldimi 9, 9, 32, 0
23813; PWR6-NEXT:    rldicl 5, 4, 60, 4
23814; PWR6-NEXT:    and 3, 3, 7
23815; PWR6-NEXT:    add 4, 4, 5
23816; PWR6-NEXT:    mulld 3, 3, 9
23817; PWR6-NEXT:    and 4, 4, 7
23818; PWR6-NEXT:    rldicl 3, 3, 8, 56
23819; PWR6-NEXT:    li 5, 46
23820; PWR6-NEXT:    mulld 4, 4, 9
23821; PWR6-NEXT:    subc 6, 3, 5
23822; PWR6-NEXT:    rldicl 4, 4, 8, 56
23823; PWR6-NEXT:    subfe 3, 3, 3
23824; PWR6-NEXT:    subc 5, 4, 5
23825; PWR6-NEXT:    subfe 4, 4, 4
23826; PWR6-NEXT:    blr
23827;
23828; PWR7-LABEL: ult_46_v2i64:
23829; PWR7:       # %bb.0:
23830; PWR7-NEXT:    addi 3, 1, -32
23831; PWR7-NEXT:    li 5, 0
23832; PWR7-NEXT:    li 6, -1
23833; PWR7-NEXT:    stxvd2x 34, 0, 3
23834; PWR7-NEXT:    ld 3, -24(1)
23835; PWR7-NEXT:    ld 4, -32(1)
23836; PWR7-NEXT:    popcntd 3, 3
23837; PWR7-NEXT:    popcntd 4, 4
23838; PWR7-NEXT:    cmpldi 3, 46
23839; PWR7-NEXT:    isellt 3, 6, 5
23840; PWR7-NEXT:    cmpldi 4, 46
23841; PWR7-NEXT:    isellt 4, 6, 5
23842; PWR7-NEXT:    std 3, -8(1)
23843; PWR7-NEXT:    addi 3, 1, -16
23844; PWR7-NEXT:    std 4, -16(1)
23845; PWR7-NEXT:    lxvd2x 34, 0, 3
23846; PWR7-NEXT:    blr
23847;
23848; PWR8-LABEL: ult_46_v2i64:
23849; PWR8:       # %bb.0:
23850; PWR8-NEXT:    addis 3, 2, .LCPI189_0@toc@ha
23851; PWR8-NEXT:    vpopcntd 2, 2
23852; PWR8-NEXT:    addi 3, 3, .LCPI189_0@toc@l
23853; PWR8-NEXT:    lxvd2x 35, 0, 3
23854; PWR8-NEXT:    vcmpgtud 2, 3, 2
23855; PWR8-NEXT:    blr
23856;
23857; PWR9-LABEL: ult_46_v2i64:
23858; PWR9:       # %bb.0:
23859; PWR9-NEXT:    addis 3, 2, .LCPI189_0@toc@ha
23860; PWR9-NEXT:    vpopcntd 2, 2
23861; PWR9-NEXT:    addi 3, 3, .LCPI189_0@toc@l
23862; PWR9-NEXT:    lxvx 35, 0, 3
23863; PWR9-NEXT:    vcmpgtud 2, 3, 2
23864; PWR9-NEXT:    blr
23865  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
23866  %3 = icmp ult <2 x i64> %2, <i64 46, i64 46>
23867  %4 = sext <2 x i1> %3 to <2 x i64>
23868  ret <2 x i64> %4
23869}
23870
23871define <2 x i64> @ugt_46_v2i64(<2 x i64> %0) {
23872; PWR5-LABEL: ugt_46_v2i64:
23873; PWR5:       # %bb.0:
23874; PWR5-NEXT:    lis 5, 21845
23875; PWR5-NEXT:    lis 6, 13107
23876; PWR5-NEXT:    ori 5, 5, 21845
23877; PWR5-NEXT:    rotldi 8, 4, 63
23878; PWR5-NEXT:    rotldi 9, 3, 63
23879; PWR5-NEXT:    rldimi 5, 5, 32, 0
23880; PWR5-NEXT:    and 8, 8, 5
23881; PWR5-NEXT:    and 5, 9, 5
23882; PWR5-NEXT:    ori 6, 6, 13107
23883; PWR5-NEXT:    sub 3, 3, 5
23884; PWR5-NEXT:    rldimi 6, 6, 32, 0
23885; PWR5-NEXT:    sub 4, 4, 8
23886; PWR5-NEXT:    and 8, 3, 6
23887; PWR5-NEXT:    rotldi 3, 3, 62
23888; PWR5-NEXT:    and 3, 3, 6
23889; PWR5-NEXT:    lis 7, 3855
23890; PWR5-NEXT:    and 5, 4, 6
23891; PWR5-NEXT:    rotldi 4, 4, 62
23892; PWR5-NEXT:    add 3, 8, 3
23893; PWR5-NEXT:    lis 9, 257
23894; PWR5-NEXT:    ori 7, 7, 3855
23895; PWR5-NEXT:    and 4, 4, 6
23896; PWR5-NEXT:    rldicl 6, 3, 60, 4
23897; PWR5-NEXT:    ori 9, 9, 257
23898; PWR5-NEXT:    rldimi 7, 7, 32, 0
23899; PWR5-NEXT:    add 4, 5, 4
23900; PWR5-NEXT:    add 3, 3, 6
23901; PWR5-NEXT:    rldimi 9, 9, 32, 0
23902; PWR5-NEXT:    rldicl 5, 4, 60, 4
23903; PWR5-NEXT:    and 3, 3, 7
23904; PWR5-NEXT:    add 4, 4, 5
23905; PWR5-NEXT:    mulld 3, 3, 9
23906; PWR5-NEXT:    and 4, 4, 7
23907; PWR5-NEXT:    rldicl 3, 3, 8, 56
23908; PWR5-NEXT:    mulld 4, 4, 9
23909; PWR5-NEXT:    li 5, 46
23910; PWR5-NEXT:    subfic 3, 3, 46
23911; PWR5-NEXT:    rldicl 4, 4, 8, 56
23912; PWR5-NEXT:    subfe 3, 5, 5
23913; PWR5-NEXT:    subfic 4, 4, 46
23914; PWR5-NEXT:    subfe 4, 5, 5
23915; PWR5-NEXT:    blr
23916;
23917; PWR6-LABEL: ugt_46_v2i64:
23918; PWR6:       # %bb.0:
23919; PWR6-NEXT:    lis 5, 21845
23920; PWR6-NEXT:    lis 6, 13107
23921; PWR6-NEXT:    ori 5, 5, 21845
23922; PWR6-NEXT:    rotldi 8, 4, 63
23923; PWR6-NEXT:    rotldi 9, 3, 63
23924; PWR6-NEXT:    rldimi 5, 5, 32, 0
23925; PWR6-NEXT:    and 8, 8, 5
23926; PWR6-NEXT:    and 5, 9, 5
23927; PWR6-NEXT:    ori 6, 6, 13107
23928; PWR6-NEXT:    sub 3, 3, 5
23929; PWR6-NEXT:    rldimi 6, 6, 32, 0
23930; PWR6-NEXT:    sub 4, 4, 8
23931; PWR6-NEXT:    and 8, 3, 6
23932; PWR6-NEXT:    rotldi 3, 3, 62
23933; PWR6-NEXT:    and 3, 3, 6
23934; PWR6-NEXT:    lis 7, 3855
23935; PWR6-NEXT:    and 5, 4, 6
23936; PWR6-NEXT:    rotldi 4, 4, 62
23937; PWR6-NEXT:    add 3, 8, 3
23938; PWR6-NEXT:    lis 9, 257
23939; PWR6-NEXT:    ori 7, 7, 3855
23940; PWR6-NEXT:    and 4, 4, 6
23941; PWR6-NEXT:    rldicl 6, 3, 60, 4
23942; PWR6-NEXT:    ori 9, 9, 257
23943; PWR6-NEXT:    rldimi 7, 7, 32, 0
23944; PWR6-NEXT:    add 4, 5, 4
23945; PWR6-NEXT:    add 3, 3, 6
23946; PWR6-NEXT:    rldimi 9, 9, 32, 0
23947; PWR6-NEXT:    rldicl 5, 4, 60, 4
23948; PWR6-NEXT:    and 3, 3, 7
23949; PWR6-NEXT:    add 4, 4, 5
23950; PWR6-NEXT:    mulld 3, 3, 9
23951; PWR6-NEXT:    and 4, 4, 7
23952; PWR6-NEXT:    rldicl 3, 3, 8, 56
23953; PWR6-NEXT:    mulld 4, 4, 9
23954; PWR6-NEXT:    li 5, 46
23955; PWR6-NEXT:    subfic 3, 3, 46
23956; PWR6-NEXT:    rldicl 4, 4, 8, 56
23957; PWR6-NEXT:    subfe 3, 5, 5
23958; PWR6-NEXT:    subfic 4, 4, 46
23959; PWR6-NEXT:    subfe 4, 5, 5
23960; PWR6-NEXT:    blr
23961;
23962; PWR7-LABEL: ugt_46_v2i64:
23963; PWR7:       # %bb.0:
23964; PWR7-NEXT:    addi 3, 1, -32
23965; PWR7-NEXT:    li 5, 0
23966; PWR7-NEXT:    li 6, -1
23967; PWR7-NEXT:    stxvd2x 34, 0, 3
23968; PWR7-NEXT:    ld 3, -24(1)
23969; PWR7-NEXT:    ld 4, -32(1)
23970; PWR7-NEXT:    popcntd 3, 3
23971; PWR7-NEXT:    popcntd 4, 4
23972; PWR7-NEXT:    cmpldi 3, 46
23973; PWR7-NEXT:    iselgt 3, 6, 5
23974; PWR7-NEXT:    cmpldi 4, 46
23975; PWR7-NEXT:    iselgt 4, 6, 5
23976; PWR7-NEXT:    std 3, -8(1)
23977; PWR7-NEXT:    addi 3, 1, -16
23978; PWR7-NEXT:    std 4, -16(1)
23979; PWR7-NEXT:    lxvd2x 34, 0, 3
23980; PWR7-NEXT:    blr
23981;
23982; PWR8-LABEL: ugt_46_v2i64:
23983; PWR8:       # %bb.0:
23984; PWR8-NEXT:    addis 3, 2, .LCPI190_0@toc@ha
23985; PWR8-NEXT:    vpopcntd 2, 2
23986; PWR8-NEXT:    addi 3, 3, .LCPI190_0@toc@l
23987; PWR8-NEXT:    lxvd2x 35, 0, 3
23988; PWR8-NEXT:    vcmpgtud 2, 2, 3
23989; PWR8-NEXT:    blr
23990;
23991; PWR9-LABEL: ugt_46_v2i64:
23992; PWR9:       # %bb.0:
23993; PWR9-NEXT:    addis 3, 2, .LCPI190_0@toc@ha
23994; PWR9-NEXT:    vpopcntd 2, 2
23995; PWR9-NEXT:    addi 3, 3, .LCPI190_0@toc@l
23996; PWR9-NEXT:    lxvx 35, 0, 3
23997; PWR9-NEXT:    vcmpgtud 2, 2, 3
23998; PWR9-NEXT:    blr
23999  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24000  %3 = icmp ugt <2 x i64> %2, <i64 46, i64 46>
24001  %4 = sext <2 x i1> %3 to <2 x i64>
24002  ret <2 x i64> %4
24003}
24004
24005define <2 x i64> @ult_47_v2i64(<2 x i64> %0) {
24006; PWR5-LABEL: ult_47_v2i64:
24007; PWR5:       # %bb.0:
24008; PWR5-NEXT:    lis 5, 21845
24009; PWR5-NEXT:    lis 6, 13107
24010; PWR5-NEXT:    ori 5, 5, 21845
24011; PWR5-NEXT:    rotldi 8, 4, 63
24012; PWR5-NEXT:    rotldi 9, 3, 63
24013; PWR5-NEXT:    rldimi 5, 5, 32, 0
24014; PWR5-NEXT:    and 8, 8, 5
24015; PWR5-NEXT:    and 5, 9, 5
24016; PWR5-NEXT:    ori 6, 6, 13107
24017; PWR5-NEXT:    sub 3, 3, 5
24018; PWR5-NEXT:    rldimi 6, 6, 32, 0
24019; PWR5-NEXT:    sub 4, 4, 8
24020; PWR5-NEXT:    and 8, 3, 6
24021; PWR5-NEXT:    rotldi 3, 3, 62
24022; PWR5-NEXT:    and 3, 3, 6
24023; PWR5-NEXT:    lis 7, 3855
24024; PWR5-NEXT:    and 5, 4, 6
24025; PWR5-NEXT:    rotldi 4, 4, 62
24026; PWR5-NEXT:    add 3, 8, 3
24027; PWR5-NEXT:    lis 9, 257
24028; PWR5-NEXT:    ori 7, 7, 3855
24029; PWR5-NEXT:    and 4, 4, 6
24030; PWR5-NEXT:    rldicl 6, 3, 60, 4
24031; PWR5-NEXT:    ori 9, 9, 257
24032; PWR5-NEXT:    rldimi 7, 7, 32, 0
24033; PWR5-NEXT:    add 4, 5, 4
24034; PWR5-NEXT:    add 3, 3, 6
24035; PWR5-NEXT:    rldimi 9, 9, 32, 0
24036; PWR5-NEXT:    rldicl 5, 4, 60, 4
24037; PWR5-NEXT:    and 3, 3, 7
24038; PWR5-NEXT:    add 4, 4, 5
24039; PWR5-NEXT:    mulld 3, 3, 9
24040; PWR5-NEXT:    and 4, 4, 7
24041; PWR5-NEXT:    rldicl 3, 3, 8, 56
24042; PWR5-NEXT:    li 5, 47
24043; PWR5-NEXT:    mulld 4, 4, 9
24044; PWR5-NEXT:    subc 6, 3, 5
24045; PWR5-NEXT:    rldicl 4, 4, 8, 56
24046; PWR5-NEXT:    subfe 3, 3, 3
24047; PWR5-NEXT:    subc 5, 4, 5
24048; PWR5-NEXT:    subfe 4, 4, 4
24049; PWR5-NEXT:    blr
24050;
24051; PWR6-LABEL: ult_47_v2i64:
24052; PWR6:       # %bb.0:
24053; PWR6-NEXT:    lis 5, 21845
24054; PWR6-NEXT:    lis 6, 13107
24055; PWR6-NEXT:    ori 5, 5, 21845
24056; PWR6-NEXT:    rotldi 8, 4, 63
24057; PWR6-NEXT:    rotldi 9, 3, 63
24058; PWR6-NEXT:    rldimi 5, 5, 32, 0
24059; PWR6-NEXT:    and 8, 8, 5
24060; PWR6-NEXT:    and 5, 9, 5
24061; PWR6-NEXT:    ori 6, 6, 13107
24062; PWR6-NEXT:    sub 3, 3, 5
24063; PWR6-NEXT:    rldimi 6, 6, 32, 0
24064; PWR6-NEXT:    sub 4, 4, 8
24065; PWR6-NEXT:    and 8, 3, 6
24066; PWR6-NEXT:    rotldi 3, 3, 62
24067; PWR6-NEXT:    and 3, 3, 6
24068; PWR6-NEXT:    lis 7, 3855
24069; PWR6-NEXT:    and 5, 4, 6
24070; PWR6-NEXT:    rotldi 4, 4, 62
24071; PWR6-NEXT:    add 3, 8, 3
24072; PWR6-NEXT:    lis 9, 257
24073; PWR6-NEXT:    ori 7, 7, 3855
24074; PWR6-NEXT:    and 4, 4, 6
24075; PWR6-NEXT:    rldicl 6, 3, 60, 4
24076; PWR6-NEXT:    ori 9, 9, 257
24077; PWR6-NEXT:    rldimi 7, 7, 32, 0
24078; PWR6-NEXT:    add 4, 5, 4
24079; PWR6-NEXT:    add 3, 3, 6
24080; PWR6-NEXT:    rldimi 9, 9, 32, 0
24081; PWR6-NEXT:    rldicl 5, 4, 60, 4
24082; PWR6-NEXT:    and 3, 3, 7
24083; PWR6-NEXT:    add 4, 4, 5
24084; PWR6-NEXT:    mulld 3, 3, 9
24085; PWR6-NEXT:    and 4, 4, 7
24086; PWR6-NEXT:    rldicl 3, 3, 8, 56
24087; PWR6-NEXT:    li 5, 47
24088; PWR6-NEXT:    mulld 4, 4, 9
24089; PWR6-NEXT:    subc 6, 3, 5
24090; PWR6-NEXT:    rldicl 4, 4, 8, 56
24091; PWR6-NEXT:    subfe 3, 3, 3
24092; PWR6-NEXT:    subc 5, 4, 5
24093; PWR6-NEXT:    subfe 4, 4, 4
24094; PWR6-NEXT:    blr
24095;
24096; PWR7-LABEL: ult_47_v2i64:
24097; PWR7:       # %bb.0:
24098; PWR7-NEXT:    addi 3, 1, -32
24099; PWR7-NEXT:    li 5, 0
24100; PWR7-NEXT:    li 6, -1
24101; PWR7-NEXT:    stxvd2x 34, 0, 3
24102; PWR7-NEXT:    ld 3, -24(1)
24103; PWR7-NEXT:    ld 4, -32(1)
24104; PWR7-NEXT:    popcntd 3, 3
24105; PWR7-NEXT:    popcntd 4, 4
24106; PWR7-NEXT:    cmpldi 3, 47
24107; PWR7-NEXT:    isellt 3, 6, 5
24108; PWR7-NEXT:    cmpldi 4, 47
24109; PWR7-NEXT:    isellt 4, 6, 5
24110; PWR7-NEXT:    std 3, -8(1)
24111; PWR7-NEXT:    addi 3, 1, -16
24112; PWR7-NEXT:    std 4, -16(1)
24113; PWR7-NEXT:    lxvd2x 34, 0, 3
24114; PWR7-NEXT:    blr
24115;
24116; PWR8-LABEL: ult_47_v2i64:
24117; PWR8:       # %bb.0:
24118; PWR8-NEXT:    addis 3, 2, .LCPI191_0@toc@ha
24119; PWR8-NEXT:    vpopcntd 2, 2
24120; PWR8-NEXT:    addi 3, 3, .LCPI191_0@toc@l
24121; PWR8-NEXT:    lxvd2x 35, 0, 3
24122; PWR8-NEXT:    vcmpgtud 2, 3, 2
24123; PWR8-NEXT:    blr
24124;
24125; PWR9-LABEL: ult_47_v2i64:
24126; PWR9:       # %bb.0:
24127; PWR9-NEXT:    addis 3, 2, .LCPI191_0@toc@ha
24128; PWR9-NEXT:    vpopcntd 2, 2
24129; PWR9-NEXT:    addi 3, 3, .LCPI191_0@toc@l
24130; PWR9-NEXT:    lxvx 35, 0, 3
24131; PWR9-NEXT:    vcmpgtud 2, 3, 2
24132; PWR9-NEXT:    blr
24133  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24134  %3 = icmp ult <2 x i64> %2, <i64 47, i64 47>
24135  %4 = sext <2 x i1> %3 to <2 x i64>
24136  ret <2 x i64> %4
24137}
24138
24139define <2 x i64> @ugt_47_v2i64(<2 x i64> %0) {
24140; PWR5-LABEL: ugt_47_v2i64:
24141; PWR5:       # %bb.0:
24142; PWR5-NEXT:    lis 5, 21845
24143; PWR5-NEXT:    lis 6, 13107
24144; PWR5-NEXT:    ori 5, 5, 21845
24145; PWR5-NEXT:    rotldi 8, 4, 63
24146; PWR5-NEXT:    rotldi 9, 3, 63
24147; PWR5-NEXT:    rldimi 5, 5, 32, 0
24148; PWR5-NEXT:    and 8, 8, 5
24149; PWR5-NEXT:    and 5, 9, 5
24150; PWR5-NEXT:    ori 6, 6, 13107
24151; PWR5-NEXT:    sub 3, 3, 5
24152; PWR5-NEXT:    rldimi 6, 6, 32, 0
24153; PWR5-NEXT:    sub 4, 4, 8
24154; PWR5-NEXT:    and 8, 3, 6
24155; PWR5-NEXT:    rotldi 3, 3, 62
24156; PWR5-NEXT:    and 3, 3, 6
24157; PWR5-NEXT:    lis 7, 3855
24158; PWR5-NEXT:    and 5, 4, 6
24159; PWR5-NEXT:    rotldi 4, 4, 62
24160; PWR5-NEXT:    add 3, 8, 3
24161; PWR5-NEXT:    lis 9, 257
24162; PWR5-NEXT:    ori 7, 7, 3855
24163; PWR5-NEXT:    and 4, 4, 6
24164; PWR5-NEXT:    rldicl 6, 3, 60, 4
24165; PWR5-NEXT:    ori 9, 9, 257
24166; PWR5-NEXT:    rldimi 7, 7, 32, 0
24167; PWR5-NEXT:    add 4, 5, 4
24168; PWR5-NEXT:    add 3, 3, 6
24169; PWR5-NEXT:    rldimi 9, 9, 32, 0
24170; PWR5-NEXT:    rldicl 5, 4, 60, 4
24171; PWR5-NEXT:    and 3, 3, 7
24172; PWR5-NEXT:    add 4, 4, 5
24173; PWR5-NEXT:    mulld 3, 3, 9
24174; PWR5-NEXT:    and 4, 4, 7
24175; PWR5-NEXT:    rldicl 3, 3, 8, 56
24176; PWR5-NEXT:    mulld 4, 4, 9
24177; PWR5-NEXT:    li 5, 47
24178; PWR5-NEXT:    subfic 3, 3, 47
24179; PWR5-NEXT:    rldicl 4, 4, 8, 56
24180; PWR5-NEXT:    subfe 3, 5, 5
24181; PWR5-NEXT:    subfic 4, 4, 47
24182; PWR5-NEXT:    subfe 4, 5, 5
24183; PWR5-NEXT:    blr
24184;
24185; PWR6-LABEL: ugt_47_v2i64:
24186; PWR6:       # %bb.0:
24187; PWR6-NEXT:    lis 5, 21845
24188; PWR6-NEXT:    lis 6, 13107
24189; PWR6-NEXT:    ori 5, 5, 21845
24190; PWR6-NEXT:    rotldi 8, 4, 63
24191; PWR6-NEXT:    rotldi 9, 3, 63
24192; PWR6-NEXT:    rldimi 5, 5, 32, 0
24193; PWR6-NEXT:    and 8, 8, 5
24194; PWR6-NEXT:    and 5, 9, 5
24195; PWR6-NEXT:    ori 6, 6, 13107
24196; PWR6-NEXT:    sub 3, 3, 5
24197; PWR6-NEXT:    rldimi 6, 6, 32, 0
24198; PWR6-NEXT:    sub 4, 4, 8
24199; PWR6-NEXT:    and 8, 3, 6
24200; PWR6-NEXT:    rotldi 3, 3, 62
24201; PWR6-NEXT:    and 3, 3, 6
24202; PWR6-NEXT:    lis 7, 3855
24203; PWR6-NEXT:    and 5, 4, 6
24204; PWR6-NEXT:    rotldi 4, 4, 62
24205; PWR6-NEXT:    add 3, 8, 3
24206; PWR6-NEXT:    lis 9, 257
24207; PWR6-NEXT:    ori 7, 7, 3855
24208; PWR6-NEXT:    and 4, 4, 6
24209; PWR6-NEXT:    rldicl 6, 3, 60, 4
24210; PWR6-NEXT:    ori 9, 9, 257
24211; PWR6-NEXT:    rldimi 7, 7, 32, 0
24212; PWR6-NEXT:    add 4, 5, 4
24213; PWR6-NEXT:    add 3, 3, 6
24214; PWR6-NEXT:    rldimi 9, 9, 32, 0
24215; PWR6-NEXT:    rldicl 5, 4, 60, 4
24216; PWR6-NEXT:    and 3, 3, 7
24217; PWR6-NEXT:    add 4, 4, 5
24218; PWR6-NEXT:    mulld 3, 3, 9
24219; PWR6-NEXT:    and 4, 4, 7
24220; PWR6-NEXT:    rldicl 3, 3, 8, 56
24221; PWR6-NEXT:    mulld 4, 4, 9
24222; PWR6-NEXT:    li 5, 47
24223; PWR6-NEXT:    subfic 3, 3, 47
24224; PWR6-NEXT:    rldicl 4, 4, 8, 56
24225; PWR6-NEXT:    subfe 3, 5, 5
24226; PWR6-NEXT:    subfic 4, 4, 47
24227; PWR6-NEXT:    subfe 4, 5, 5
24228; PWR6-NEXT:    blr
24229;
24230; PWR7-LABEL: ugt_47_v2i64:
24231; PWR7:       # %bb.0:
24232; PWR7-NEXT:    addi 3, 1, -32
24233; PWR7-NEXT:    li 5, 0
24234; PWR7-NEXT:    li 6, -1
24235; PWR7-NEXT:    stxvd2x 34, 0, 3
24236; PWR7-NEXT:    ld 3, -24(1)
24237; PWR7-NEXT:    ld 4, -32(1)
24238; PWR7-NEXT:    popcntd 3, 3
24239; PWR7-NEXT:    popcntd 4, 4
24240; PWR7-NEXT:    cmpldi 3, 47
24241; PWR7-NEXT:    iselgt 3, 6, 5
24242; PWR7-NEXT:    cmpldi 4, 47
24243; PWR7-NEXT:    iselgt 4, 6, 5
24244; PWR7-NEXT:    std 3, -8(1)
24245; PWR7-NEXT:    addi 3, 1, -16
24246; PWR7-NEXT:    std 4, -16(1)
24247; PWR7-NEXT:    lxvd2x 34, 0, 3
24248; PWR7-NEXT:    blr
24249;
24250; PWR8-LABEL: ugt_47_v2i64:
24251; PWR8:       # %bb.0:
24252; PWR8-NEXT:    addis 3, 2, .LCPI192_0@toc@ha
24253; PWR8-NEXT:    vpopcntd 2, 2
24254; PWR8-NEXT:    addi 3, 3, .LCPI192_0@toc@l
24255; PWR8-NEXT:    lxvd2x 35, 0, 3
24256; PWR8-NEXT:    vcmpgtud 2, 2, 3
24257; PWR8-NEXT:    blr
24258;
24259; PWR9-LABEL: ugt_47_v2i64:
24260; PWR9:       # %bb.0:
24261; PWR9-NEXT:    addis 3, 2, .LCPI192_0@toc@ha
24262; PWR9-NEXT:    vpopcntd 2, 2
24263; PWR9-NEXT:    addi 3, 3, .LCPI192_0@toc@l
24264; PWR9-NEXT:    lxvx 35, 0, 3
24265; PWR9-NEXT:    vcmpgtud 2, 2, 3
24266; PWR9-NEXT:    blr
24267  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24268  %3 = icmp ugt <2 x i64> %2, <i64 47, i64 47>
24269  %4 = sext <2 x i1> %3 to <2 x i64>
24270  ret <2 x i64> %4
24271}
24272
24273define <2 x i64> @ult_48_v2i64(<2 x i64> %0) {
24274; PWR5-LABEL: ult_48_v2i64:
24275; PWR5:       # %bb.0:
24276; PWR5-NEXT:    lis 5, 21845
24277; PWR5-NEXT:    lis 6, 13107
24278; PWR5-NEXT:    ori 5, 5, 21845
24279; PWR5-NEXT:    rotldi 8, 4, 63
24280; PWR5-NEXT:    rotldi 9, 3, 63
24281; PWR5-NEXT:    rldimi 5, 5, 32, 0
24282; PWR5-NEXT:    and 8, 8, 5
24283; PWR5-NEXT:    and 5, 9, 5
24284; PWR5-NEXT:    ori 6, 6, 13107
24285; PWR5-NEXT:    sub 3, 3, 5
24286; PWR5-NEXT:    rldimi 6, 6, 32, 0
24287; PWR5-NEXT:    sub 4, 4, 8
24288; PWR5-NEXT:    and 8, 3, 6
24289; PWR5-NEXT:    rotldi 3, 3, 62
24290; PWR5-NEXT:    and 3, 3, 6
24291; PWR5-NEXT:    lis 7, 3855
24292; PWR5-NEXT:    and 5, 4, 6
24293; PWR5-NEXT:    rotldi 4, 4, 62
24294; PWR5-NEXT:    add 3, 8, 3
24295; PWR5-NEXT:    lis 9, 257
24296; PWR5-NEXT:    ori 7, 7, 3855
24297; PWR5-NEXT:    and 4, 4, 6
24298; PWR5-NEXT:    rldicl 6, 3, 60, 4
24299; PWR5-NEXT:    ori 9, 9, 257
24300; PWR5-NEXT:    rldimi 7, 7, 32, 0
24301; PWR5-NEXT:    add 4, 5, 4
24302; PWR5-NEXT:    add 3, 3, 6
24303; PWR5-NEXT:    rldimi 9, 9, 32, 0
24304; PWR5-NEXT:    rldicl 5, 4, 60, 4
24305; PWR5-NEXT:    and 3, 3, 7
24306; PWR5-NEXT:    add 4, 4, 5
24307; PWR5-NEXT:    mulld 3, 3, 9
24308; PWR5-NEXT:    and 4, 4, 7
24309; PWR5-NEXT:    rldicl 3, 3, 8, 56
24310; PWR5-NEXT:    li 5, 48
24311; PWR5-NEXT:    mulld 4, 4, 9
24312; PWR5-NEXT:    subc 6, 3, 5
24313; PWR5-NEXT:    rldicl 4, 4, 8, 56
24314; PWR5-NEXT:    subfe 3, 3, 3
24315; PWR5-NEXT:    subc 5, 4, 5
24316; PWR5-NEXT:    subfe 4, 4, 4
24317; PWR5-NEXT:    blr
24318;
24319; PWR6-LABEL: ult_48_v2i64:
24320; PWR6:       # %bb.0:
24321; PWR6-NEXT:    lis 5, 21845
24322; PWR6-NEXT:    lis 6, 13107
24323; PWR6-NEXT:    ori 5, 5, 21845
24324; PWR6-NEXT:    rotldi 8, 4, 63
24325; PWR6-NEXT:    rotldi 9, 3, 63
24326; PWR6-NEXT:    rldimi 5, 5, 32, 0
24327; PWR6-NEXT:    and 8, 8, 5
24328; PWR6-NEXT:    and 5, 9, 5
24329; PWR6-NEXT:    ori 6, 6, 13107
24330; PWR6-NEXT:    sub 3, 3, 5
24331; PWR6-NEXT:    rldimi 6, 6, 32, 0
24332; PWR6-NEXT:    sub 4, 4, 8
24333; PWR6-NEXT:    and 8, 3, 6
24334; PWR6-NEXT:    rotldi 3, 3, 62
24335; PWR6-NEXT:    and 3, 3, 6
24336; PWR6-NEXT:    lis 7, 3855
24337; PWR6-NEXT:    and 5, 4, 6
24338; PWR6-NEXT:    rotldi 4, 4, 62
24339; PWR6-NEXT:    add 3, 8, 3
24340; PWR6-NEXT:    lis 9, 257
24341; PWR6-NEXT:    ori 7, 7, 3855
24342; PWR6-NEXT:    and 4, 4, 6
24343; PWR6-NEXT:    rldicl 6, 3, 60, 4
24344; PWR6-NEXT:    ori 9, 9, 257
24345; PWR6-NEXT:    rldimi 7, 7, 32, 0
24346; PWR6-NEXT:    add 4, 5, 4
24347; PWR6-NEXT:    add 3, 3, 6
24348; PWR6-NEXT:    rldimi 9, 9, 32, 0
24349; PWR6-NEXT:    rldicl 5, 4, 60, 4
24350; PWR6-NEXT:    and 3, 3, 7
24351; PWR6-NEXT:    add 4, 4, 5
24352; PWR6-NEXT:    mulld 3, 3, 9
24353; PWR6-NEXT:    and 4, 4, 7
24354; PWR6-NEXT:    rldicl 3, 3, 8, 56
24355; PWR6-NEXT:    li 5, 48
24356; PWR6-NEXT:    mulld 4, 4, 9
24357; PWR6-NEXT:    subc 6, 3, 5
24358; PWR6-NEXT:    rldicl 4, 4, 8, 56
24359; PWR6-NEXT:    subfe 3, 3, 3
24360; PWR6-NEXT:    subc 5, 4, 5
24361; PWR6-NEXT:    subfe 4, 4, 4
24362; PWR6-NEXT:    blr
24363;
24364; PWR7-LABEL: ult_48_v2i64:
24365; PWR7:       # %bb.0:
24366; PWR7-NEXT:    addi 3, 1, -32
24367; PWR7-NEXT:    li 5, 0
24368; PWR7-NEXT:    li 6, -1
24369; PWR7-NEXT:    stxvd2x 34, 0, 3
24370; PWR7-NEXT:    ld 3, -24(1)
24371; PWR7-NEXT:    ld 4, -32(1)
24372; PWR7-NEXT:    popcntd 3, 3
24373; PWR7-NEXT:    popcntd 4, 4
24374; PWR7-NEXT:    cmpldi 3, 48
24375; PWR7-NEXT:    isellt 3, 6, 5
24376; PWR7-NEXT:    cmpldi 4, 48
24377; PWR7-NEXT:    isellt 4, 6, 5
24378; PWR7-NEXT:    std 3, -8(1)
24379; PWR7-NEXT:    addi 3, 1, -16
24380; PWR7-NEXT:    std 4, -16(1)
24381; PWR7-NEXT:    lxvd2x 34, 0, 3
24382; PWR7-NEXT:    blr
24383;
24384; PWR8-LABEL: ult_48_v2i64:
24385; PWR8:       # %bb.0:
24386; PWR8-NEXT:    addis 3, 2, .LCPI193_0@toc@ha
24387; PWR8-NEXT:    vpopcntd 2, 2
24388; PWR8-NEXT:    addi 3, 3, .LCPI193_0@toc@l
24389; PWR8-NEXT:    lxvd2x 35, 0, 3
24390; PWR8-NEXT:    vcmpgtud 2, 3, 2
24391; PWR8-NEXT:    blr
24392;
24393; PWR9-LABEL: ult_48_v2i64:
24394; PWR9:       # %bb.0:
24395; PWR9-NEXT:    addis 3, 2, .LCPI193_0@toc@ha
24396; PWR9-NEXT:    vpopcntd 2, 2
24397; PWR9-NEXT:    addi 3, 3, .LCPI193_0@toc@l
24398; PWR9-NEXT:    lxvx 35, 0, 3
24399; PWR9-NEXT:    vcmpgtud 2, 3, 2
24400; PWR9-NEXT:    blr
24401  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24402  %3 = icmp ult <2 x i64> %2, <i64 48, i64 48>
24403  %4 = sext <2 x i1> %3 to <2 x i64>
24404  ret <2 x i64> %4
24405}
24406
24407define <2 x i64> @ugt_48_v2i64(<2 x i64> %0) {
24408; PWR5-LABEL: ugt_48_v2i64:
24409; PWR5:       # %bb.0:
24410; PWR5-NEXT:    lis 5, 21845
24411; PWR5-NEXT:    lis 6, 13107
24412; PWR5-NEXT:    ori 5, 5, 21845
24413; PWR5-NEXT:    rotldi 8, 4, 63
24414; PWR5-NEXT:    rotldi 9, 3, 63
24415; PWR5-NEXT:    rldimi 5, 5, 32, 0
24416; PWR5-NEXT:    and 8, 8, 5
24417; PWR5-NEXT:    and 5, 9, 5
24418; PWR5-NEXT:    ori 6, 6, 13107
24419; PWR5-NEXT:    sub 3, 3, 5
24420; PWR5-NEXT:    rldimi 6, 6, 32, 0
24421; PWR5-NEXT:    sub 4, 4, 8
24422; PWR5-NEXT:    and 8, 3, 6
24423; PWR5-NEXT:    rotldi 3, 3, 62
24424; PWR5-NEXT:    and 3, 3, 6
24425; PWR5-NEXT:    lis 7, 3855
24426; PWR5-NEXT:    and 5, 4, 6
24427; PWR5-NEXT:    rotldi 4, 4, 62
24428; PWR5-NEXT:    add 3, 8, 3
24429; PWR5-NEXT:    lis 9, 257
24430; PWR5-NEXT:    ori 7, 7, 3855
24431; PWR5-NEXT:    and 4, 4, 6
24432; PWR5-NEXT:    rldicl 6, 3, 60, 4
24433; PWR5-NEXT:    ori 9, 9, 257
24434; PWR5-NEXT:    rldimi 7, 7, 32, 0
24435; PWR5-NEXT:    add 4, 5, 4
24436; PWR5-NEXT:    add 3, 3, 6
24437; PWR5-NEXT:    rldimi 9, 9, 32, 0
24438; PWR5-NEXT:    rldicl 5, 4, 60, 4
24439; PWR5-NEXT:    and 3, 3, 7
24440; PWR5-NEXT:    add 4, 4, 5
24441; PWR5-NEXT:    mulld 3, 3, 9
24442; PWR5-NEXT:    and 4, 4, 7
24443; PWR5-NEXT:    rldicl 3, 3, 8, 56
24444; PWR5-NEXT:    mulld 4, 4, 9
24445; PWR5-NEXT:    li 5, 48
24446; PWR5-NEXT:    subfic 3, 3, 48
24447; PWR5-NEXT:    rldicl 4, 4, 8, 56
24448; PWR5-NEXT:    subfe 3, 5, 5
24449; PWR5-NEXT:    subfic 4, 4, 48
24450; PWR5-NEXT:    subfe 4, 5, 5
24451; PWR5-NEXT:    blr
24452;
24453; PWR6-LABEL: ugt_48_v2i64:
24454; PWR6:       # %bb.0:
24455; PWR6-NEXT:    lis 5, 21845
24456; PWR6-NEXT:    lis 6, 13107
24457; PWR6-NEXT:    ori 5, 5, 21845
24458; PWR6-NEXT:    rotldi 8, 4, 63
24459; PWR6-NEXT:    rotldi 9, 3, 63
24460; PWR6-NEXT:    rldimi 5, 5, 32, 0
24461; PWR6-NEXT:    and 8, 8, 5
24462; PWR6-NEXT:    and 5, 9, 5
24463; PWR6-NEXT:    ori 6, 6, 13107
24464; PWR6-NEXT:    sub 3, 3, 5
24465; PWR6-NEXT:    rldimi 6, 6, 32, 0
24466; PWR6-NEXT:    sub 4, 4, 8
24467; PWR6-NEXT:    and 8, 3, 6
24468; PWR6-NEXT:    rotldi 3, 3, 62
24469; PWR6-NEXT:    and 3, 3, 6
24470; PWR6-NEXT:    lis 7, 3855
24471; PWR6-NEXT:    and 5, 4, 6
24472; PWR6-NEXT:    rotldi 4, 4, 62
24473; PWR6-NEXT:    add 3, 8, 3
24474; PWR6-NEXT:    lis 9, 257
24475; PWR6-NEXT:    ori 7, 7, 3855
24476; PWR6-NEXT:    and 4, 4, 6
24477; PWR6-NEXT:    rldicl 6, 3, 60, 4
24478; PWR6-NEXT:    ori 9, 9, 257
24479; PWR6-NEXT:    rldimi 7, 7, 32, 0
24480; PWR6-NEXT:    add 4, 5, 4
24481; PWR6-NEXT:    add 3, 3, 6
24482; PWR6-NEXT:    rldimi 9, 9, 32, 0
24483; PWR6-NEXT:    rldicl 5, 4, 60, 4
24484; PWR6-NEXT:    and 3, 3, 7
24485; PWR6-NEXT:    add 4, 4, 5
24486; PWR6-NEXT:    mulld 3, 3, 9
24487; PWR6-NEXT:    and 4, 4, 7
24488; PWR6-NEXT:    rldicl 3, 3, 8, 56
24489; PWR6-NEXT:    mulld 4, 4, 9
24490; PWR6-NEXT:    li 5, 48
24491; PWR6-NEXT:    subfic 3, 3, 48
24492; PWR6-NEXT:    rldicl 4, 4, 8, 56
24493; PWR6-NEXT:    subfe 3, 5, 5
24494; PWR6-NEXT:    subfic 4, 4, 48
24495; PWR6-NEXT:    subfe 4, 5, 5
24496; PWR6-NEXT:    blr
24497;
24498; PWR7-LABEL: ugt_48_v2i64:
24499; PWR7:       # %bb.0:
24500; PWR7-NEXT:    addi 3, 1, -32
24501; PWR7-NEXT:    li 5, 0
24502; PWR7-NEXT:    li 6, -1
24503; PWR7-NEXT:    stxvd2x 34, 0, 3
24504; PWR7-NEXT:    ld 3, -24(1)
24505; PWR7-NEXT:    ld 4, -32(1)
24506; PWR7-NEXT:    popcntd 3, 3
24507; PWR7-NEXT:    popcntd 4, 4
24508; PWR7-NEXT:    cmpldi 3, 48
24509; PWR7-NEXT:    iselgt 3, 6, 5
24510; PWR7-NEXT:    cmpldi 4, 48
24511; PWR7-NEXT:    iselgt 4, 6, 5
24512; PWR7-NEXT:    std 3, -8(1)
24513; PWR7-NEXT:    addi 3, 1, -16
24514; PWR7-NEXT:    std 4, -16(1)
24515; PWR7-NEXT:    lxvd2x 34, 0, 3
24516; PWR7-NEXT:    blr
24517;
24518; PWR8-LABEL: ugt_48_v2i64:
24519; PWR8:       # %bb.0:
24520; PWR8-NEXT:    addis 3, 2, .LCPI194_0@toc@ha
24521; PWR8-NEXT:    vpopcntd 2, 2
24522; PWR8-NEXT:    addi 3, 3, .LCPI194_0@toc@l
24523; PWR8-NEXT:    lxvd2x 35, 0, 3
24524; PWR8-NEXT:    vcmpgtud 2, 2, 3
24525; PWR8-NEXT:    blr
24526;
24527; PWR9-LABEL: ugt_48_v2i64:
24528; PWR9:       # %bb.0:
24529; PWR9-NEXT:    addis 3, 2, .LCPI194_0@toc@ha
24530; PWR9-NEXT:    vpopcntd 2, 2
24531; PWR9-NEXT:    addi 3, 3, .LCPI194_0@toc@l
24532; PWR9-NEXT:    lxvx 35, 0, 3
24533; PWR9-NEXT:    vcmpgtud 2, 2, 3
24534; PWR9-NEXT:    blr
24535  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24536  %3 = icmp ugt <2 x i64> %2, <i64 48, i64 48>
24537  %4 = sext <2 x i1> %3 to <2 x i64>
24538  ret <2 x i64> %4
24539}
24540
24541define <2 x i64> @ult_49_v2i64(<2 x i64> %0) {
24542; PWR5-LABEL: ult_49_v2i64:
24543; PWR5:       # %bb.0:
24544; PWR5-NEXT:    lis 5, 21845
24545; PWR5-NEXT:    lis 6, 13107
24546; PWR5-NEXT:    ori 5, 5, 21845
24547; PWR5-NEXT:    rotldi 8, 4, 63
24548; PWR5-NEXT:    rotldi 9, 3, 63
24549; PWR5-NEXT:    rldimi 5, 5, 32, 0
24550; PWR5-NEXT:    and 8, 8, 5
24551; PWR5-NEXT:    and 5, 9, 5
24552; PWR5-NEXT:    ori 6, 6, 13107
24553; PWR5-NEXT:    sub 3, 3, 5
24554; PWR5-NEXT:    rldimi 6, 6, 32, 0
24555; PWR5-NEXT:    sub 4, 4, 8
24556; PWR5-NEXT:    and 8, 3, 6
24557; PWR5-NEXT:    rotldi 3, 3, 62
24558; PWR5-NEXT:    and 3, 3, 6
24559; PWR5-NEXT:    lis 7, 3855
24560; PWR5-NEXT:    and 5, 4, 6
24561; PWR5-NEXT:    rotldi 4, 4, 62
24562; PWR5-NEXT:    add 3, 8, 3
24563; PWR5-NEXT:    lis 9, 257
24564; PWR5-NEXT:    ori 7, 7, 3855
24565; PWR5-NEXT:    and 4, 4, 6
24566; PWR5-NEXT:    rldicl 6, 3, 60, 4
24567; PWR5-NEXT:    ori 9, 9, 257
24568; PWR5-NEXT:    rldimi 7, 7, 32, 0
24569; PWR5-NEXT:    add 4, 5, 4
24570; PWR5-NEXT:    add 3, 3, 6
24571; PWR5-NEXT:    rldimi 9, 9, 32, 0
24572; PWR5-NEXT:    rldicl 5, 4, 60, 4
24573; PWR5-NEXT:    and 3, 3, 7
24574; PWR5-NEXT:    add 4, 4, 5
24575; PWR5-NEXT:    mulld 3, 3, 9
24576; PWR5-NEXT:    and 4, 4, 7
24577; PWR5-NEXT:    rldicl 3, 3, 8, 56
24578; PWR5-NEXT:    li 5, 49
24579; PWR5-NEXT:    mulld 4, 4, 9
24580; PWR5-NEXT:    subc 6, 3, 5
24581; PWR5-NEXT:    rldicl 4, 4, 8, 56
24582; PWR5-NEXT:    subfe 3, 3, 3
24583; PWR5-NEXT:    subc 5, 4, 5
24584; PWR5-NEXT:    subfe 4, 4, 4
24585; PWR5-NEXT:    blr
24586;
24587; PWR6-LABEL: ult_49_v2i64:
24588; PWR6:       # %bb.0:
24589; PWR6-NEXT:    lis 5, 21845
24590; PWR6-NEXT:    lis 6, 13107
24591; PWR6-NEXT:    ori 5, 5, 21845
24592; PWR6-NEXT:    rotldi 8, 4, 63
24593; PWR6-NEXT:    rotldi 9, 3, 63
24594; PWR6-NEXT:    rldimi 5, 5, 32, 0
24595; PWR6-NEXT:    and 8, 8, 5
24596; PWR6-NEXT:    and 5, 9, 5
24597; PWR6-NEXT:    ori 6, 6, 13107
24598; PWR6-NEXT:    sub 3, 3, 5
24599; PWR6-NEXT:    rldimi 6, 6, 32, 0
24600; PWR6-NEXT:    sub 4, 4, 8
24601; PWR6-NEXT:    and 8, 3, 6
24602; PWR6-NEXT:    rotldi 3, 3, 62
24603; PWR6-NEXT:    and 3, 3, 6
24604; PWR6-NEXT:    lis 7, 3855
24605; PWR6-NEXT:    and 5, 4, 6
24606; PWR6-NEXT:    rotldi 4, 4, 62
24607; PWR6-NEXT:    add 3, 8, 3
24608; PWR6-NEXT:    lis 9, 257
24609; PWR6-NEXT:    ori 7, 7, 3855
24610; PWR6-NEXT:    and 4, 4, 6
24611; PWR6-NEXT:    rldicl 6, 3, 60, 4
24612; PWR6-NEXT:    ori 9, 9, 257
24613; PWR6-NEXT:    rldimi 7, 7, 32, 0
24614; PWR6-NEXT:    add 4, 5, 4
24615; PWR6-NEXT:    add 3, 3, 6
24616; PWR6-NEXT:    rldimi 9, 9, 32, 0
24617; PWR6-NEXT:    rldicl 5, 4, 60, 4
24618; PWR6-NEXT:    and 3, 3, 7
24619; PWR6-NEXT:    add 4, 4, 5
24620; PWR6-NEXT:    mulld 3, 3, 9
24621; PWR6-NEXT:    and 4, 4, 7
24622; PWR6-NEXT:    rldicl 3, 3, 8, 56
24623; PWR6-NEXT:    li 5, 49
24624; PWR6-NEXT:    mulld 4, 4, 9
24625; PWR6-NEXT:    subc 6, 3, 5
24626; PWR6-NEXT:    rldicl 4, 4, 8, 56
24627; PWR6-NEXT:    subfe 3, 3, 3
24628; PWR6-NEXT:    subc 5, 4, 5
24629; PWR6-NEXT:    subfe 4, 4, 4
24630; PWR6-NEXT:    blr
24631;
24632; PWR7-LABEL: ult_49_v2i64:
24633; PWR7:       # %bb.0:
24634; PWR7-NEXT:    addi 3, 1, -32
24635; PWR7-NEXT:    li 5, 0
24636; PWR7-NEXT:    li 6, -1
24637; PWR7-NEXT:    stxvd2x 34, 0, 3
24638; PWR7-NEXT:    ld 3, -24(1)
24639; PWR7-NEXT:    ld 4, -32(1)
24640; PWR7-NEXT:    popcntd 3, 3
24641; PWR7-NEXT:    popcntd 4, 4
24642; PWR7-NEXT:    cmpldi 3, 49
24643; PWR7-NEXT:    isellt 3, 6, 5
24644; PWR7-NEXT:    cmpldi 4, 49
24645; PWR7-NEXT:    isellt 4, 6, 5
24646; PWR7-NEXT:    std 3, -8(1)
24647; PWR7-NEXT:    addi 3, 1, -16
24648; PWR7-NEXT:    std 4, -16(1)
24649; PWR7-NEXT:    lxvd2x 34, 0, 3
24650; PWR7-NEXT:    blr
24651;
24652; PWR8-LABEL: ult_49_v2i64:
24653; PWR8:       # %bb.0:
24654; PWR8-NEXT:    addis 3, 2, .LCPI195_0@toc@ha
24655; PWR8-NEXT:    vpopcntd 2, 2
24656; PWR8-NEXT:    addi 3, 3, .LCPI195_0@toc@l
24657; PWR8-NEXT:    lxvd2x 35, 0, 3
24658; PWR8-NEXT:    vcmpgtud 2, 3, 2
24659; PWR8-NEXT:    blr
24660;
24661; PWR9-LABEL: ult_49_v2i64:
24662; PWR9:       # %bb.0:
24663; PWR9-NEXT:    addis 3, 2, .LCPI195_0@toc@ha
24664; PWR9-NEXT:    vpopcntd 2, 2
24665; PWR9-NEXT:    addi 3, 3, .LCPI195_0@toc@l
24666; PWR9-NEXT:    lxvx 35, 0, 3
24667; PWR9-NEXT:    vcmpgtud 2, 3, 2
24668; PWR9-NEXT:    blr
24669  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24670  %3 = icmp ult <2 x i64> %2, <i64 49, i64 49>
24671  %4 = sext <2 x i1> %3 to <2 x i64>
24672  ret <2 x i64> %4
24673}
24674
24675define <2 x i64> @ugt_49_v2i64(<2 x i64> %0) {
24676; PWR5-LABEL: ugt_49_v2i64:
24677; PWR5:       # %bb.0:
24678; PWR5-NEXT:    lis 5, 21845
24679; PWR5-NEXT:    lis 6, 13107
24680; PWR5-NEXT:    ori 5, 5, 21845
24681; PWR5-NEXT:    rotldi 8, 4, 63
24682; PWR5-NEXT:    rotldi 9, 3, 63
24683; PWR5-NEXT:    rldimi 5, 5, 32, 0
24684; PWR5-NEXT:    and 8, 8, 5
24685; PWR5-NEXT:    and 5, 9, 5
24686; PWR5-NEXT:    ori 6, 6, 13107
24687; PWR5-NEXT:    sub 3, 3, 5
24688; PWR5-NEXT:    rldimi 6, 6, 32, 0
24689; PWR5-NEXT:    sub 4, 4, 8
24690; PWR5-NEXT:    and 8, 3, 6
24691; PWR5-NEXT:    rotldi 3, 3, 62
24692; PWR5-NEXT:    and 3, 3, 6
24693; PWR5-NEXT:    lis 7, 3855
24694; PWR5-NEXT:    and 5, 4, 6
24695; PWR5-NEXT:    rotldi 4, 4, 62
24696; PWR5-NEXT:    add 3, 8, 3
24697; PWR5-NEXT:    lis 9, 257
24698; PWR5-NEXT:    ori 7, 7, 3855
24699; PWR5-NEXT:    and 4, 4, 6
24700; PWR5-NEXT:    rldicl 6, 3, 60, 4
24701; PWR5-NEXT:    ori 9, 9, 257
24702; PWR5-NEXT:    rldimi 7, 7, 32, 0
24703; PWR5-NEXT:    add 4, 5, 4
24704; PWR5-NEXT:    add 3, 3, 6
24705; PWR5-NEXT:    rldimi 9, 9, 32, 0
24706; PWR5-NEXT:    rldicl 5, 4, 60, 4
24707; PWR5-NEXT:    and 3, 3, 7
24708; PWR5-NEXT:    add 4, 4, 5
24709; PWR5-NEXT:    mulld 3, 3, 9
24710; PWR5-NEXT:    and 4, 4, 7
24711; PWR5-NEXT:    rldicl 3, 3, 8, 56
24712; PWR5-NEXT:    mulld 4, 4, 9
24713; PWR5-NEXT:    li 5, 49
24714; PWR5-NEXT:    subfic 3, 3, 49
24715; PWR5-NEXT:    rldicl 4, 4, 8, 56
24716; PWR5-NEXT:    subfe 3, 5, 5
24717; PWR5-NEXT:    subfic 4, 4, 49
24718; PWR5-NEXT:    subfe 4, 5, 5
24719; PWR5-NEXT:    blr
24720;
24721; PWR6-LABEL: ugt_49_v2i64:
24722; PWR6:       # %bb.0:
24723; PWR6-NEXT:    lis 5, 21845
24724; PWR6-NEXT:    lis 6, 13107
24725; PWR6-NEXT:    ori 5, 5, 21845
24726; PWR6-NEXT:    rotldi 8, 4, 63
24727; PWR6-NEXT:    rotldi 9, 3, 63
24728; PWR6-NEXT:    rldimi 5, 5, 32, 0
24729; PWR6-NEXT:    and 8, 8, 5
24730; PWR6-NEXT:    and 5, 9, 5
24731; PWR6-NEXT:    ori 6, 6, 13107
24732; PWR6-NEXT:    sub 3, 3, 5
24733; PWR6-NEXT:    rldimi 6, 6, 32, 0
24734; PWR6-NEXT:    sub 4, 4, 8
24735; PWR6-NEXT:    and 8, 3, 6
24736; PWR6-NEXT:    rotldi 3, 3, 62
24737; PWR6-NEXT:    and 3, 3, 6
24738; PWR6-NEXT:    lis 7, 3855
24739; PWR6-NEXT:    and 5, 4, 6
24740; PWR6-NEXT:    rotldi 4, 4, 62
24741; PWR6-NEXT:    add 3, 8, 3
24742; PWR6-NEXT:    lis 9, 257
24743; PWR6-NEXT:    ori 7, 7, 3855
24744; PWR6-NEXT:    and 4, 4, 6
24745; PWR6-NEXT:    rldicl 6, 3, 60, 4
24746; PWR6-NEXT:    ori 9, 9, 257
24747; PWR6-NEXT:    rldimi 7, 7, 32, 0
24748; PWR6-NEXT:    add 4, 5, 4
24749; PWR6-NEXT:    add 3, 3, 6
24750; PWR6-NEXT:    rldimi 9, 9, 32, 0
24751; PWR6-NEXT:    rldicl 5, 4, 60, 4
24752; PWR6-NEXT:    and 3, 3, 7
24753; PWR6-NEXT:    add 4, 4, 5
24754; PWR6-NEXT:    mulld 3, 3, 9
24755; PWR6-NEXT:    and 4, 4, 7
24756; PWR6-NEXT:    rldicl 3, 3, 8, 56
24757; PWR6-NEXT:    mulld 4, 4, 9
24758; PWR6-NEXT:    li 5, 49
24759; PWR6-NEXT:    subfic 3, 3, 49
24760; PWR6-NEXT:    rldicl 4, 4, 8, 56
24761; PWR6-NEXT:    subfe 3, 5, 5
24762; PWR6-NEXT:    subfic 4, 4, 49
24763; PWR6-NEXT:    subfe 4, 5, 5
24764; PWR6-NEXT:    blr
24765;
24766; PWR7-LABEL: ugt_49_v2i64:
24767; PWR7:       # %bb.0:
24768; PWR7-NEXT:    addi 3, 1, -32
24769; PWR7-NEXT:    li 5, 0
24770; PWR7-NEXT:    li 6, -1
24771; PWR7-NEXT:    stxvd2x 34, 0, 3
24772; PWR7-NEXT:    ld 3, -24(1)
24773; PWR7-NEXT:    ld 4, -32(1)
24774; PWR7-NEXT:    popcntd 3, 3
24775; PWR7-NEXT:    popcntd 4, 4
24776; PWR7-NEXT:    cmpldi 3, 49
24777; PWR7-NEXT:    iselgt 3, 6, 5
24778; PWR7-NEXT:    cmpldi 4, 49
24779; PWR7-NEXT:    iselgt 4, 6, 5
24780; PWR7-NEXT:    std 3, -8(1)
24781; PWR7-NEXT:    addi 3, 1, -16
24782; PWR7-NEXT:    std 4, -16(1)
24783; PWR7-NEXT:    lxvd2x 34, 0, 3
24784; PWR7-NEXT:    blr
24785;
24786; PWR8-LABEL: ugt_49_v2i64:
24787; PWR8:       # %bb.0:
24788; PWR8-NEXT:    addis 3, 2, .LCPI196_0@toc@ha
24789; PWR8-NEXT:    vpopcntd 2, 2
24790; PWR8-NEXT:    addi 3, 3, .LCPI196_0@toc@l
24791; PWR8-NEXT:    lxvd2x 35, 0, 3
24792; PWR8-NEXT:    vcmpgtud 2, 2, 3
24793; PWR8-NEXT:    blr
24794;
24795; PWR9-LABEL: ugt_49_v2i64:
24796; PWR9:       # %bb.0:
24797; PWR9-NEXT:    addis 3, 2, .LCPI196_0@toc@ha
24798; PWR9-NEXT:    vpopcntd 2, 2
24799; PWR9-NEXT:    addi 3, 3, .LCPI196_0@toc@l
24800; PWR9-NEXT:    lxvx 35, 0, 3
24801; PWR9-NEXT:    vcmpgtud 2, 2, 3
24802; PWR9-NEXT:    blr
24803  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24804  %3 = icmp ugt <2 x i64> %2, <i64 49, i64 49>
24805  %4 = sext <2 x i1> %3 to <2 x i64>
24806  ret <2 x i64> %4
24807}
24808
24809define <2 x i64> @ult_50_v2i64(<2 x i64> %0) {
24810; PWR5-LABEL: ult_50_v2i64:
24811; PWR5:       # %bb.0:
24812; PWR5-NEXT:    lis 5, 21845
24813; PWR5-NEXT:    lis 6, 13107
24814; PWR5-NEXT:    ori 5, 5, 21845
24815; PWR5-NEXT:    rotldi 8, 4, 63
24816; PWR5-NEXT:    rotldi 9, 3, 63
24817; PWR5-NEXT:    rldimi 5, 5, 32, 0
24818; PWR5-NEXT:    and 8, 8, 5
24819; PWR5-NEXT:    and 5, 9, 5
24820; PWR5-NEXT:    ori 6, 6, 13107
24821; PWR5-NEXT:    sub 3, 3, 5
24822; PWR5-NEXT:    rldimi 6, 6, 32, 0
24823; PWR5-NEXT:    sub 4, 4, 8
24824; PWR5-NEXT:    and 8, 3, 6
24825; PWR5-NEXT:    rotldi 3, 3, 62
24826; PWR5-NEXT:    and 3, 3, 6
24827; PWR5-NEXT:    lis 7, 3855
24828; PWR5-NEXT:    and 5, 4, 6
24829; PWR5-NEXT:    rotldi 4, 4, 62
24830; PWR5-NEXT:    add 3, 8, 3
24831; PWR5-NEXT:    lis 9, 257
24832; PWR5-NEXT:    ori 7, 7, 3855
24833; PWR5-NEXT:    and 4, 4, 6
24834; PWR5-NEXT:    rldicl 6, 3, 60, 4
24835; PWR5-NEXT:    ori 9, 9, 257
24836; PWR5-NEXT:    rldimi 7, 7, 32, 0
24837; PWR5-NEXT:    add 4, 5, 4
24838; PWR5-NEXT:    add 3, 3, 6
24839; PWR5-NEXT:    rldimi 9, 9, 32, 0
24840; PWR5-NEXT:    rldicl 5, 4, 60, 4
24841; PWR5-NEXT:    and 3, 3, 7
24842; PWR5-NEXT:    add 4, 4, 5
24843; PWR5-NEXT:    mulld 3, 3, 9
24844; PWR5-NEXT:    and 4, 4, 7
24845; PWR5-NEXT:    rldicl 3, 3, 8, 56
24846; PWR5-NEXT:    li 5, 50
24847; PWR5-NEXT:    mulld 4, 4, 9
24848; PWR5-NEXT:    subc 6, 3, 5
24849; PWR5-NEXT:    rldicl 4, 4, 8, 56
24850; PWR5-NEXT:    subfe 3, 3, 3
24851; PWR5-NEXT:    subc 5, 4, 5
24852; PWR5-NEXT:    subfe 4, 4, 4
24853; PWR5-NEXT:    blr
24854;
24855; PWR6-LABEL: ult_50_v2i64:
24856; PWR6:       # %bb.0:
24857; PWR6-NEXT:    lis 5, 21845
24858; PWR6-NEXT:    lis 6, 13107
24859; PWR6-NEXT:    ori 5, 5, 21845
24860; PWR6-NEXT:    rotldi 8, 4, 63
24861; PWR6-NEXT:    rotldi 9, 3, 63
24862; PWR6-NEXT:    rldimi 5, 5, 32, 0
24863; PWR6-NEXT:    and 8, 8, 5
24864; PWR6-NEXT:    and 5, 9, 5
24865; PWR6-NEXT:    ori 6, 6, 13107
24866; PWR6-NEXT:    sub 3, 3, 5
24867; PWR6-NEXT:    rldimi 6, 6, 32, 0
24868; PWR6-NEXT:    sub 4, 4, 8
24869; PWR6-NEXT:    and 8, 3, 6
24870; PWR6-NEXT:    rotldi 3, 3, 62
24871; PWR6-NEXT:    and 3, 3, 6
24872; PWR6-NEXT:    lis 7, 3855
24873; PWR6-NEXT:    and 5, 4, 6
24874; PWR6-NEXT:    rotldi 4, 4, 62
24875; PWR6-NEXT:    add 3, 8, 3
24876; PWR6-NEXT:    lis 9, 257
24877; PWR6-NEXT:    ori 7, 7, 3855
24878; PWR6-NEXT:    and 4, 4, 6
24879; PWR6-NEXT:    rldicl 6, 3, 60, 4
24880; PWR6-NEXT:    ori 9, 9, 257
24881; PWR6-NEXT:    rldimi 7, 7, 32, 0
24882; PWR6-NEXT:    add 4, 5, 4
24883; PWR6-NEXT:    add 3, 3, 6
24884; PWR6-NEXT:    rldimi 9, 9, 32, 0
24885; PWR6-NEXT:    rldicl 5, 4, 60, 4
24886; PWR6-NEXT:    and 3, 3, 7
24887; PWR6-NEXT:    add 4, 4, 5
24888; PWR6-NEXT:    mulld 3, 3, 9
24889; PWR6-NEXT:    and 4, 4, 7
24890; PWR6-NEXT:    rldicl 3, 3, 8, 56
24891; PWR6-NEXT:    li 5, 50
24892; PWR6-NEXT:    mulld 4, 4, 9
24893; PWR6-NEXT:    subc 6, 3, 5
24894; PWR6-NEXT:    rldicl 4, 4, 8, 56
24895; PWR6-NEXT:    subfe 3, 3, 3
24896; PWR6-NEXT:    subc 5, 4, 5
24897; PWR6-NEXT:    subfe 4, 4, 4
24898; PWR6-NEXT:    blr
24899;
24900; PWR7-LABEL: ult_50_v2i64:
24901; PWR7:       # %bb.0:
24902; PWR7-NEXT:    addi 3, 1, -32
24903; PWR7-NEXT:    li 5, 0
24904; PWR7-NEXT:    li 6, -1
24905; PWR7-NEXT:    stxvd2x 34, 0, 3
24906; PWR7-NEXT:    ld 3, -24(1)
24907; PWR7-NEXT:    ld 4, -32(1)
24908; PWR7-NEXT:    popcntd 3, 3
24909; PWR7-NEXT:    popcntd 4, 4
24910; PWR7-NEXT:    cmpldi 3, 50
24911; PWR7-NEXT:    isellt 3, 6, 5
24912; PWR7-NEXT:    cmpldi 4, 50
24913; PWR7-NEXT:    isellt 4, 6, 5
24914; PWR7-NEXT:    std 3, -8(1)
24915; PWR7-NEXT:    addi 3, 1, -16
24916; PWR7-NEXT:    std 4, -16(1)
24917; PWR7-NEXT:    lxvd2x 34, 0, 3
24918; PWR7-NEXT:    blr
24919;
24920; PWR8-LABEL: ult_50_v2i64:
24921; PWR8:       # %bb.0:
24922; PWR8-NEXT:    addis 3, 2, .LCPI197_0@toc@ha
24923; PWR8-NEXT:    vpopcntd 2, 2
24924; PWR8-NEXT:    addi 3, 3, .LCPI197_0@toc@l
24925; PWR8-NEXT:    lxvd2x 35, 0, 3
24926; PWR8-NEXT:    vcmpgtud 2, 3, 2
24927; PWR8-NEXT:    blr
24928;
24929; PWR9-LABEL: ult_50_v2i64:
24930; PWR9:       # %bb.0:
24931; PWR9-NEXT:    addis 3, 2, .LCPI197_0@toc@ha
24932; PWR9-NEXT:    vpopcntd 2, 2
24933; PWR9-NEXT:    addi 3, 3, .LCPI197_0@toc@l
24934; PWR9-NEXT:    lxvx 35, 0, 3
24935; PWR9-NEXT:    vcmpgtud 2, 3, 2
24936; PWR9-NEXT:    blr
24937  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
24938  %3 = icmp ult <2 x i64> %2, <i64 50, i64 50>
24939  %4 = sext <2 x i1> %3 to <2 x i64>
24940  ret <2 x i64> %4
24941}
24942
24943define <2 x i64> @ugt_50_v2i64(<2 x i64> %0) {
24944; PWR5-LABEL: ugt_50_v2i64:
24945; PWR5:       # %bb.0:
24946; PWR5-NEXT:    lis 5, 21845
24947; PWR5-NEXT:    lis 6, 13107
24948; PWR5-NEXT:    ori 5, 5, 21845
24949; PWR5-NEXT:    rotldi 8, 4, 63
24950; PWR5-NEXT:    rotldi 9, 3, 63
24951; PWR5-NEXT:    rldimi 5, 5, 32, 0
24952; PWR5-NEXT:    and 8, 8, 5
24953; PWR5-NEXT:    and 5, 9, 5
24954; PWR5-NEXT:    ori 6, 6, 13107
24955; PWR5-NEXT:    sub 3, 3, 5
24956; PWR5-NEXT:    rldimi 6, 6, 32, 0
24957; PWR5-NEXT:    sub 4, 4, 8
24958; PWR5-NEXT:    and 8, 3, 6
24959; PWR5-NEXT:    rotldi 3, 3, 62
24960; PWR5-NEXT:    and 3, 3, 6
24961; PWR5-NEXT:    lis 7, 3855
24962; PWR5-NEXT:    and 5, 4, 6
24963; PWR5-NEXT:    rotldi 4, 4, 62
24964; PWR5-NEXT:    add 3, 8, 3
24965; PWR5-NEXT:    lis 9, 257
24966; PWR5-NEXT:    ori 7, 7, 3855
24967; PWR5-NEXT:    and 4, 4, 6
24968; PWR5-NEXT:    rldicl 6, 3, 60, 4
24969; PWR5-NEXT:    ori 9, 9, 257
24970; PWR5-NEXT:    rldimi 7, 7, 32, 0
24971; PWR5-NEXT:    add 4, 5, 4
24972; PWR5-NEXT:    add 3, 3, 6
24973; PWR5-NEXT:    rldimi 9, 9, 32, 0
24974; PWR5-NEXT:    rldicl 5, 4, 60, 4
24975; PWR5-NEXT:    and 3, 3, 7
24976; PWR5-NEXT:    add 4, 4, 5
24977; PWR5-NEXT:    mulld 3, 3, 9
24978; PWR5-NEXT:    and 4, 4, 7
24979; PWR5-NEXT:    rldicl 3, 3, 8, 56
24980; PWR5-NEXT:    mulld 4, 4, 9
24981; PWR5-NEXT:    li 5, 50
24982; PWR5-NEXT:    subfic 3, 3, 50
24983; PWR5-NEXT:    rldicl 4, 4, 8, 56
24984; PWR5-NEXT:    subfe 3, 5, 5
24985; PWR5-NEXT:    subfic 4, 4, 50
24986; PWR5-NEXT:    subfe 4, 5, 5
24987; PWR5-NEXT:    blr
24988;
24989; PWR6-LABEL: ugt_50_v2i64:
24990; PWR6:       # %bb.0:
24991; PWR6-NEXT:    lis 5, 21845
24992; PWR6-NEXT:    lis 6, 13107
24993; PWR6-NEXT:    ori 5, 5, 21845
24994; PWR6-NEXT:    rotldi 8, 4, 63
24995; PWR6-NEXT:    rotldi 9, 3, 63
24996; PWR6-NEXT:    rldimi 5, 5, 32, 0
24997; PWR6-NEXT:    and 8, 8, 5
24998; PWR6-NEXT:    and 5, 9, 5
24999; PWR6-NEXT:    ori 6, 6, 13107
25000; PWR6-NEXT:    sub 3, 3, 5
25001; PWR6-NEXT:    rldimi 6, 6, 32, 0
25002; PWR6-NEXT:    sub 4, 4, 8
25003; PWR6-NEXT:    and 8, 3, 6
25004; PWR6-NEXT:    rotldi 3, 3, 62
25005; PWR6-NEXT:    and 3, 3, 6
25006; PWR6-NEXT:    lis 7, 3855
25007; PWR6-NEXT:    and 5, 4, 6
25008; PWR6-NEXT:    rotldi 4, 4, 62
25009; PWR6-NEXT:    add 3, 8, 3
25010; PWR6-NEXT:    lis 9, 257
25011; PWR6-NEXT:    ori 7, 7, 3855
25012; PWR6-NEXT:    and 4, 4, 6
25013; PWR6-NEXT:    rldicl 6, 3, 60, 4
25014; PWR6-NEXT:    ori 9, 9, 257
25015; PWR6-NEXT:    rldimi 7, 7, 32, 0
25016; PWR6-NEXT:    add 4, 5, 4
25017; PWR6-NEXT:    add 3, 3, 6
25018; PWR6-NEXT:    rldimi 9, 9, 32, 0
25019; PWR6-NEXT:    rldicl 5, 4, 60, 4
25020; PWR6-NEXT:    and 3, 3, 7
25021; PWR6-NEXT:    add 4, 4, 5
25022; PWR6-NEXT:    mulld 3, 3, 9
25023; PWR6-NEXT:    and 4, 4, 7
25024; PWR6-NEXT:    rldicl 3, 3, 8, 56
25025; PWR6-NEXT:    mulld 4, 4, 9
25026; PWR6-NEXT:    li 5, 50
25027; PWR6-NEXT:    subfic 3, 3, 50
25028; PWR6-NEXT:    rldicl 4, 4, 8, 56
25029; PWR6-NEXT:    subfe 3, 5, 5
25030; PWR6-NEXT:    subfic 4, 4, 50
25031; PWR6-NEXT:    subfe 4, 5, 5
25032; PWR6-NEXT:    blr
25033;
25034; PWR7-LABEL: ugt_50_v2i64:
25035; PWR7:       # %bb.0:
25036; PWR7-NEXT:    addi 3, 1, -32
25037; PWR7-NEXT:    li 5, 0
25038; PWR7-NEXT:    li 6, -1
25039; PWR7-NEXT:    stxvd2x 34, 0, 3
25040; PWR7-NEXT:    ld 3, -24(1)
25041; PWR7-NEXT:    ld 4, -32(1)
25042; PWR7-NEXT:    popcntd 3, 3
25043; PWR7-NEXT:    popcntd 4, 4
25044; PWR7-NEXT:    cmpldi 3, 50
25045; PWR7-NEXT:    iselgt 3, 6, 5
25046; PWR7-NEXT:    cmpldi 4, 50
25047; PWR7-NEXT:    iselgt 4, 6, 5
25048; PWR7-NEXT:    std 3, -8(1)
25049; PWR7-NEXT:    addi 3, 1, -16
25050; PWR7-NEXT:    std 4, -16(1)
25051; PWR7-NEXT:    lxvd2x 34, 0, 3
25052; PWR7-NEXT:    blr
25053;
25054; PWR8-LABEL: ugt_50_v2i64:
25055; PWR8:       # %bb.0:
25056; PWR8-NEXT:    addis 3, 2, .LCPI198_0@toc@ha
25057; PWR8-NEXT:    vpopcntd 2, 2
25058; PWR8-NEXT:    addi 3, 3, .LCPI198_0@toc@l
25059; PWR8-NEXT:    lxvd2x 35, 0, 3
25060; PWR8-NEXT:    vcmpgtud 2, 2, 3
25061; PWR8-NEXT:    blr
25062;
25063; PWR9-LABEL: ugt_50_v2i64:
25064; PWR9:       # %bb.0:
25065; PWR9-NEXT:    addis 3, 2, .LCPI198_0@toc@ha
25066; PWR9-NEXT:    vpopcntd 2, 2
25067; PWR9-NEXT:    addi 3, 3, .LCPI198_0@toc@l
25068; PWR9-NEXT:    lxvx 35, 0, 3
25069; PWR9-NEXT:    vcmpgtud 2, 2, 3
25070; PWR9-NEXT:    blr
25071  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25072  %3 = icmp ugt <2 x i64> %2, <i64 50, i64 50>
25073  %4 = sext <2 x i1> %3 to <2 x i64>
25074  ret <2 x i64> %4
25075}
25076
25077define <2 x i64> @ult_51_v2i64(<2 x i64> %0) {
25078; PWR5-LABEL: ult_51_v2i64:
25079; PWR5:       # %bb.0:
25080; PWR5-NEXT:    lis 5, 21845
25081; PWR5-NEXT:    lis 6, 13107
25082; PWR5-NEXT:    ori 5, 5, 21845
25083; PWR5-NEXT:    rotldi 8, 4, 63
25084; PWR5-NEXT:    rotldi 9, 3, 63
25085; PWR5-NEXT:    rldimi 5, 5, 32, 0
25086; PWR5-NEXT:    and 8, 8, 5
25087; PWR5-NEXT:    and 5, 9, 5
25088; PWR5-NEXT:    ori 6, 6, 13107
25089; PWR5-NEXT:    sub 3, 3, 5
25090; PWR5-NEXT:    rldimi 6, 6, 32, 0
25091; PWR5-NEXT:    sub 4, 4, 8
25092; PWR5-NEXT:    and 8, 3, 6
25093; PWR5-NEXT:    rotldi 3, 3, 62
25094; PWR5-NEXT:    and 3, 3, 6
25095; PWR5-NEXT:    lis 7, 3855
25096; PWR5-NEXT:    and 5, 4, 6
25097; PWR5-NEXT:    rotldi 4, 4, 62
25098; PWR5-NEXT:    add 3, 8, 3
25099; PWR5-NEXT:    lis 9, 257
25100; PWR5-NEXT:    ori 7, 7, 3855
25101; PWR5-NEXT:    and 4, 4, 6
25102; PWR5-NEXT:    rldicl 6, 3, 60, 4
25103; PWR5-NEXT:    ori 9, 9, 257
25104; PWR5-NEXT:    rldimi 7, 7, 32, 0
25105; PWR5-NEXT:    add 4, 5, 4
25106; PWR5-NEXT:    add 3, 3, 6
25107; PWR5-NEXT:    rldimi 9, 9, 32, 0
25108; PWR5-NEXT:    rldicl 5, 4, 60, 4
25109; PWR5-NEXT:    and 3, 3, 7
25110; PWR5-NEXT:    add 4, 4, 5
25111; PWR5-NEXT:    mulld 3, 3, 9
25112; PWR5-NEXT:    and 4, 4, 7
25113; PWR5-NEXT:    rldicl 3, 3, 8, 56
25114; PWR5-NEXT:    li 5, 51
25115; PWR5-NEXT:    mulld 4, 4, 9
25116; PWR5-NEXT:    subc 6, 3, 5
25117; PWR5-NEXT:    rldicl 4, 4, 8, 56
25118; PWR5-NEXT:    subfe 3, 3, 3
25119; PWR5-NEXT:    subc 5, 4, 5
25120; PWR5-NEXT:    subfe 4, 4, 4
25121; PWR5-NEXT:    blr
25122;
25123; PWR6-LABEL: ult_51_v2i64:
25124; PWR6:       # %bb.0:
25125; PWR6-NEXT:    lis 5, 21845
25126; PWR6-NEXT:    lis 6, 13107
25127; PWR6-NEXT:    ori 5, 5, 21845
25128; PWR6-NEXT:    rotldi 8, 4, 63
25129; PWR6-NEXT:    rotldi 9, 3, 63
25130; PWR6-NEXT:    rldimi 5, 5, 32, 0
25131; PWR6-NEXT:    and 8, 8, 5
25132; PWR6-NEXT:    and 5, 9, 5
25133; PWR6-NEXT:    ori 6, 6, 13107
25134; PWR6-NEXT:    sub 3, 3, 5
25135; PWR6-NEXT:    rldimi 6, 6, 32, 0
25136; PWR6-NEXT:    sub 4, 4, 8
25137; PWR6-NEXT:    and 8, 3, 6
25138; PWR6-NEXT:    rotldi 3, 3, 62
25139; PWR6-NEXT:    and 3, 3, 6
25140; PWR6-NEXT:    lis 7, 3855
25141; PWR6-NEXT:    and 5, 4, 6
25142; PWR6-NEXT:    rotldi 4, 4, 62
25143; PWR6-NEXT:    add 3, 8, 3
25144; PWR6-NEXT:    lis 9, 257
25145; PWR6-NEXT:    ori 7, 7, 3855
25146; PWR6-NEXT:    and 4, 4, 6
25147; PWR6-NEXT:    rldicl 6, 3, 60, 4
25148; PWR6-NEXT:    ori 9, 9, 257
25149; PWR6-NEXT:    rldimi 7, 7, 32, 0
25150; PWR6-NEXT:    add 4, 5, 4
25151; PWR6-NEXT:    add 3, 3, 6
25152; PWR6-NEXT:    rldimi 9, 9, 32, 0
25153; PWR6-NEXT:    rldicl 5, 4, 60, 4
25154; PWR6-NEXT:    and 3, 3, 7
25155; PWR6-NEXT:    add 4, 4, 5
25156; PWR6-NEXT:    mulld 3, 3, 9
25157; PWR6-NEXT:    and 4, 4, 7
25158; PWR6-NEXT:    rldicl 3, 3, 8, 56
25159; PWR6-NEXT:    li 5, 51
25160; PWR6-NEXT:    mulld 4, 4, 9
25161; PWR6-NEXT:    subc 6, 3, 5
25162; PWR6-NEXT:    rldicl 4, 4, 8, 56
25163; PWR6-NEXT:    subfe 3, 3, 3
25164; PWR6-NEXT:    subc 5, 4, 5
25165; PWR6-NEXT:    subfe 4, 4, 4
25166; PWR6-NEXT:    blr
25167;
25168; PWR7-LABEL: ult_51_v2i64:
25169; PWR7:       # %bb.0:
25170; PWR7-NEXT:    addi 3, 1, -32
25171; PWR7-NEXT:    li 5, 0
25172; PWR7-NEXT:    li 6, -1
25173; PWR7-NEXT:    stxvd2x 34, 0, 3
25174; PWR7-NEXT:    ld 3, -24(1)
25175; PWR7-NEXT:    ld 4, -32(1)
25176; PWR7-NEXT:    popcntd 3, 3
25177; PWR7-NEXT:    popcntd 4, 4
25178; PWR7-NEXT:    cmpldi 3, 51
25179; PWR7-NEXT:    isellt 3, 6, 5
25180; PWR7-NEXT:    cmpldi 4, 51
25181; PWR7-NEXT:    isellt 4, 6, 5
25182; PWR7-NEXT:    std 3, -8(1)
25183; PWR7-NEXT:    addi 3, 1, -16
25184; PWR7-NEXT:    std 4, -16(1)
25185; PWR7-NEXT:    lxvd2x 34, 0, 3
25186; PWR7-NEXT:    blr
25187;
25188; PWR8-LABEL: ult_51_v2i64:
25189; PWR8:       # %bb.0:
25190; PWR8-NEXT:    addis 3, 2, .LCPI199_0@toc@ha
25191; PWR8-NEXT:    vpopcntd 2, 2
25192; PWR8-NEXT:    addi 3, 3, .LCPI199_0@toc@l
25193; PWR8-NEXT:    lxvd2x 35, 0, 3
25194; PWR8-NEXT:    vcmpgtud 2, 3, 2
25195; PWR8-NEXT:    blr
25196;
25197; PWR9-LABEL: ult_51_v2i64:
25198; PWR9:       # %bb.0:
25199; PWR9-NEXT:    addis 3, 2, .LCPI199_0@toc@ha
25200; PWR9-NEXT:    vpopcntd 2, 2
25201; PWR9-NEXT:    addi 3, 3, .LCPI199_0@toc@l
25202; PWR9-NEXT:    lxvx 35, 0, 3
25203; PWR9-NEXT:    vcmpgtud 2, 3, 2
25204; PWR9-NEXT:    blr
25205  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25206  %3 = icmp ult <2 x i64> %2, <i64 51, i64 51>
25207  %4 = sext <2 x i1> %3 to <2 x i64>
25208  ret <2 x i64> %4
25209}
25210
25211define <2 x i64> @ugt_51_v2i64(<2 x i64> %0) {
25212; PWR5-LABEL: ugt_51_v2i64:
25213; PWR5:       # %bb.0:
25214; PWR5-NEXT:    lis 5, 21845
25215; PWR5-NEXT:    lis 6, 13107
25216; PWR5-NEXT:    ori 5, 5, 21845
25217; PWR5-NEXT:    rotldi 8, 4, 63
25218; PWR5-NEXT:    rotldi 9, 3, 63
25219; PWR5-NEXT:    rldimi 5, 5, 32, 0
25220; PWR5-NEXT:    and 8, 8, 5
25221; PWR5-NEXT:    and 5, 9, 5
25222; PWR5-NEXT:    ori 6, 6, 13107
25223; PWR5-NEXT:    sub 3, 3, 5
25224; PWR5-NEXT:    rldimi 6, 6, 32, 0
25225; PWR5-NEXT:    sub 4, 4, 8
25226; PWR5-NEXT:    and 8, 3, 6
25227; PWR5-NEXT:    rotldi 3, 3, 62
25228; PWR5-NEXT:    and 3, 3, 6
25229; PWR5-NEXT:    lis 7, 3855
25230; PWR5-NEXT:    and 5, 4, 6
25231; PWR5-NEXT:    rotldi 4, 4, 62
25232; PWR5-NEXT:    add 3, 8, 3
25233; PWR5-NEXT:    lis 9, 257
25234; PWR5-NEXT:    ori 7, 7, 3855
25235; PWR5-NEXT:    and 4, 4, 6
25236; PWR5-NEXT:    rldicl 6, 3, 60, 4
25237; PWR5-NEXT:    ori 9, 9, 257
25238; PWR5-NEXT:    rldimi 7, 7, 32, 0
25239; PWR5-NEXT:    add 4, 5, 4
25240; PWR5-NEXT:    add 3, 3, 6
25241; PWR5-NEXT:    rldimi 9, 9, 32, 0
25242; PWR5-NEXT:    rldicl 5, 4, 60, 4
25243; PWR5-NEXT:    and 3, 3, 7
25244; PWR5-NEXT:    add 4, 4, 5
25245; PWR5-NEXT:    mulld 3, 3, 9
25246; PWR5-NEXT:    and 4, 4, 7
25247; PWR5-NEXT:    rldicl 3, 3, 8, 56
25248; PWR5-NEXT:    mulld 4, 4, 9
25249; PWR5-NEXT:    li 5, 51
25250; PWR5-NEXT:    subfic 3, 3, 51
25251; PWR5-NEXT:    rldicl 4, 4, 8, 56
25252; PWR5-NEXT:    subfe 3, 5, 5
25253; PWR5-NEXT:    subfic 4, 4, 51
25254; PWR5-NEXT:    subfe 4, 5, 5
25255; PWR5-NEXT:    blr
25256;
25257; PWR6-LABEL: ugt_51_v2i64:
25258; PWR6:       # %bb.0:
25259; PWR6-NEXT:    lis 5, 21845
25260; PWR6-NEXT:    lis 6, 13107
25261; PWR6-NEXT:    ori 5, 5, 21845
25262; PWR6-NEXT:    rotldi 8, 4, 63
25263; PWR6-NEXT:    rotldi 9, 3, 63
25264; PWR6-NEXT:    rldimi 5, 5, 32, 0
25265; PWR6-NEXT:    and 8, 8, 5
25266; PWR6-NEXT:    and 5, 9, 5
25267; PWR6-NEXT:    ori 6, 6, 13107
25268; PWR6-NEXT:    sub 3, 3, 5
25269; PWR6-NEXT:    rldimi 6, 6, 32, 0
25270; PWR6-NEXT:    sub 4, 4, 8
25271; PWR6-NEXT:    and 8, 3, 6
25272; PWR6-NEXT:    rotldi 3, 3, 62
25273; PWR6-NEXT:    and 3, 3, 6
25274; PWR6-NEXT:    lis 7, 3855
25275; PWR6-NEXT:    and 5, 4, 6
25276; PWR6-NEXT:    rotldi 4, 4, 62
25277; PWR6-NEXT:    add 3, 8, 3
25278; PWR6-NEXT:    lis 9, 257
25279; PWR6-NEXT:    ori 7, 7, 3855
25280; PWR6-NEXT:    and 4, 4, 6
25281; PWR6-NEXT:    rldicl 6, 3, 60, 4
25282; PWR6-NEXT:    ori 9, 9, 257
25283; PWR6-NEXT:    rldimi 7, 7, 32, 0
25284; PWR6-NEXT:    add 4, 5, 4
25285; PWR6-NEXT:    add 3, 3, 6
25286; PWR6-NEXT:    rldimi 9, 9, 32, 0
25287; PWR6-NEXT:    rldicl 5, 4, 60, 4
25288; PWR6-NEXT:    and 3, 3, 7
25289; PWR6-NEXT:    add 4, 4, 5
25290; PWR6-NEXT:    mulld 3, 3, 9
25291; PWR6-NEXT:    and 4, 4, 7
25292; PWR6-NEXT:    rldicl 3, 3, 8, 56
25293; PWR6-NEXT:    mulld 4, 4, 9
25294; PWR6-NEXT:    li 5, 51
25295; PWR6-NEXT:    subfic 3, 3, 51
25296; PWR6-NEXT:    rldicl 4, 4, 8, 56
25297; PWR6-NEXT:    subfe 3, 5, 5
25298; PWR6-NEXT:    subfic 4, 4, 51
25299; PWR6-NEXT:    subfe 4, 5, 5
25300; PWR6-NEXT:    blr
25301;
25302; PWR7-LABEL: ugt_51_v2i64:
25303; PWR7:       # %bb.0:
25304; PWR7-NEXT:    addi 3, 1, -32
25305; PWR7-NEXT:    li 5, 0
25306; PWR7-NEXT:    li 6, -1
25307; PWR7-NEXT:    stxvd2x 34, 0, 3
25308; PWR7-NEXT:    ld 3, -24(1)
25309; PWR7-NEXT:    ld 4, -32(1)
25310; PWR7-NEXT:    popcntd 3, 3
25311; PWR7-NEXT:    popcntd 4, 4
25312; PWR7-NEXT:    cmpldi 3, 51
25313; PWR7-NEXT:    iselgt 3, 6, 5
25314; PWR7-NEXT:    cmpldi 4, 51
25315; PWR7-NEXT:    iselgt 4, 6, 5
25316; PWR7-NEXT:    std 3, -8(1)
25317; PWR7-NEXT:    addi 3, 1, -16
25318; PWR7-NEXT:    std 4, -16(1)
25319; PWR7-NEXT:    lxvd2x 34, 0, 3
25320; PWR7-NEXT:    blr
25321;
25322; PWR8-LABEL: ugt_51_v2i64:
25323; PWR8:       # %bb.0:
25324; PWR8-NEXT:    addis 3, 2, .LCPI200_0@toc@ha
25325; PWR8-NEXT:    vpopcntd 2, 2
25326; PWR8-NEXT:    addi 3, 3, .LCPI200_0@toc@l
25327; PWR8-NEXT:    lxvd2x 35, 0, 3
25328; PWR8-NEXT:    vcmpgtud 2, 2, 3
25329; PWR8-NEXT:    blr
25330;
25331; PWR9-LABEL: ugt_51_v2i64:
25332; PWR9:       # %bb.0:
25333; PWR9-NEXT:    addis 3, 2, .LCPI200_0@toc@ha
25334; PWR9-NEXT:    vpopcntd 2, 2
25335; PWR9-NEXT:    addi 3, 3, .LCPI200_0@toc@l
25336; PWR9-NEXT:    lxvx 35, 0, 3
25337; PWR9-NEXT:    vcmpgtud 2, 2, 3
25338; PWR9-NEXT:    blr
25339  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25340  %3 = icmp ugt <2 x i64> %2, <i64 51, i64 51>
25341  %4 = sext <2 x i1> %3 to <2 x i64>
25342  ret <2 x i64> %4
25343}
25344
25345define <2 x i64> @ult_52_v2i64(<2 x i64> %0) {
25346; PWR5-LABEL: ult_52_v2i64:
25347; PWR5:       # %bb.0:
25348; PWR5-NEXT:    lis 5, 21845
25349; PWR5-NEXT:    lis 6, 13107
25350; PWR5-NEXT:    ori 5, 5, 21845
25351; PWR5-NEXT:    rotldi 8, 4, 63
25352; PWR5-NEXT:    rotldi 9, 3, 63
25353; PWR5-NEXT:    rldimi 5, 5, 32, 0
25354; PWR5-NEXT:    and 8, 8, 5
25355; PWR5-NEXT:    and 5, 9, 5
25356; PWR5-NEXT:    ori 6, 6, 13107
25357; PWR5-NEXT:    sub 3, 3, 5
25358; PWR5-NEXT:    rldimi 6, 6, 32, 0
25359; PWR5-NEXT:    sub 4, 4, 8
25360; PWR5-NEXT:    and 8, 3, 6
25361; PWR5-NEXT:    rotldi 3, 3, 62
25362; PWR5-NEXT:    and 3, 3, 6
25363; PWR5-NEXT:    lis 7, 3855
25364; PWR5-NEXT:    and 5, 4, 6
25365; PWR5-NEXT:    rotldi 4, 4, 62
25366; PWR5-NEXT:    add 3, 8, 3
25367; PWR5-NEXT:    lis 9, 257
25368; PWR5-NEXT:    ori 7, 7, 3855
25369; PWR5-NEXT:    and 4, 4, 6
25370; PWR5-NEXT:    rldicl 6, 3, 60, 4
25371; PWR5-NEXT:    ori 9, 9, 257
25372; PWR5-NEXT:    rldimi 7, 7, 32, 0
25373; PWR5-NEXT:    add 4, 5, 4
25374; PWR5-NEXT:    add 3, 3, 6
25375; PWR5-NEXT:    rldimi 9, 9, 32, 0
25376; PWR5-NEXT:    rldicl 5, 4, 60, 4
25377; PWR5-NEXT:    and 3, 3, 7
25378; PWR5-NEXT:    add 4, 4, 5
25379; PWR5-NEXT:    mulld 3, 3, 9
25380; PWR5-NEXT:    and 4, 4, 7
25381; PWR5-NEXT:    rldicl 3, 3, 8, 56
25382; PWR5-NEXT:    li 5, 52
25383; PWR5-NEXT:    mulld 4, 4, 9
25384; PWR5-NEXT:    subc 6, 3, 5
25385; PWR5-NEXT:    rldicl 4, 4, 8, 56
25386; PWR5-NEXT:    subfe 3, 3, 3
25387; PWR5-NEXT:    subc 5, 4, 5
25388; PWR5-NEXT:    subfe 4, 4, 4
25389; PWR5-NEXT:    blr
25390;
25391; PWR6-LABEL: ult_52_v2i64:
25392; PWR6:       # %bb.0:
25393; PWR6-NEXT:    lis 5, 21845
25394; PWR6-NEXT:    lis 6, 13107
25395; PWR6-NEXT:    ori 5, 5, 21845
25396; PWR6-NEXT:    rotldi 8, 4, 63
25397; PWR6-NEXT:    rotldi 9, 3, 63
25398; PWR6-NEXT:    rldimi 5, 5, 32, 0
25399; PWR6-NEXT:    and 8, 8, 5
25400; PWR6-NEXT:    and 5, 9, 5
25401; PWR6-NEXT:    ori 6, 6, 13107
25402; PWR6-NEXT:    sub 3, 3, 5
25403; PWR6-NEXT:    rldimi 6, 6, 32, 0
25404; PWR6-NEXT:    sub 4, 4, 8
25405; PWR6-NEXT:    and 8, 3, 6
25406; PWR6-NEXT:    rotldi 3, 3, 62
25407; PWR6-NEXT:    and 3, 3, 6
25408; PWR6-NEXT:    lis 7, 3855
25409; PWR6-NEXT:    and 5, 4, 6
25410; PWR6-NEXT:    rotldi 4, 4, 62
25411; PWR6-NEXT:    add 3, 8, 3
25412; PWR6-NEXT:    lis 9, 257
25413; PWR6-NEXT:    ori 7, 7, 3855
25414; PWR6-NEXT:    and 4, 4, 6
25415; PWR6-NEXT:    rldicl 6, 3, 60, 4
25416; PWR6-NEXT:    ori 9, 9, 257
25417; PWR6-NEXT:    rldimi 7, 7, 32, 0
25418; PWR6-NEXT:    add 4, 5, 4
25419; PWR6-NEXT:    add 3, 3, 6
25420; PWR6-NEXT:    rldimi 9, 9, 32, 0
25421; PWR6-NEXT:    rldicl 5, 4, 60, 4
25422; PWR6-NEXT:    and 3, 3, 7
25423; PWR6-NEXT:    add 4, 4, 5
25424; PWR6-NEXT:    mulld 3, 3, 9
25425; PWR6-NEXT:    and 4, 4, 7
25426; PWR6-NEXT:    rldicl 3, 3, 8, 56
25427; PWR6-NEXT:    li 5, 52
25428; PWR6-NEXT:    mulld 4, 4, 9
25429; PWR6-NEXT:    subc 6, 3, 5
25430; PWR6-NEXT:    rldicl 4, 4, 8, 56
25431; PWR6-NEXT:    subfe 3, 3, 3
25432; PWR6-NEXT:    subc 5, 4, 5
25433; PWR6-NEXT:    subfe 4, 4, 4
25434; PWR6-NEXT:    blr
25435;
25436; PWR7-LABEL: ult_52_v2i64:
25437; PWR7:       # %bb.0:
25438; PWR7-NEXT:    addi 3, 1, -32
25439; PWR7-NEXT:    li 5, 0
25440; PWR7-NEXT:    li 6, -1
25441; PWR7-NEXT:    stxvd2x 34, 0, 3
25442; PWR7-NEXT:    ld 3, -24(1)
25443; PWR7-NEXT:    ld 4, -32(1)
25444; PWR7-NEXT:    popcntd 3, 3
25445; PWR7-NEXT:    popcntd 4, 4
25446; PWR7-NEXT:    cmpldi 3, 52
25447; PWR7-NEXT:    isellt 3, 6, 5
25448; PWR7-NEXT:    cmpldi 4, 52
25449; PWR7-NEXT:    isellt 4, 6, 5
25450; PWR7-NEXT:    std 3, -8(1)
25451; PWR7-NEXT:    addi 3, 1, -16
25452; PWR7-NEXT:    std 4, -16(1)
25453; PWR7-NEXT:    lxvd2x 34, 0, 3
25454; PWR7-NEXT:    blr
25455;
25456; PWR8-LABEL: ult_52_v2i64:
25457; PWR8:       # %bb.0:
25458; PWR8-NEXT:    addis 3, 2, .LCPI201_0@toc@ha
25459; PWR8-NEXT:    vpopcntd 2, 2
25460; PWR8-NEXT:    addi 3, 3, .LCPI201_0@toc@l
25461; PWR8-NEXT:    lxvd2x 35, 0, 3
25462; PWR8-NEXT:    vcmpgtud 2, 3, 2
25463; PWR8-NEXT:    blr
25464;
25465; PWR9-LABEL: ult_52_v2i64:
25466; PWR9:       # %bb.0:
25467; PWR9-NEXT:    addis 3, 2, .LCPI201_0@toc@ha
25468; PWR9-NEXT:    vpopcntd 2, 2
25469; PWR9-NEXT:    addi 3, 3, .LCPI201_0@toc@l
25470; PWR9-NEXT:    lxvx 35, 0, 3
25471; PWR9-NEXT:    vcmpgtud 2, 3, 2
25472; PWR9-NEXT:    blr
25473  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25474  %3 = icmp ult <2 x i64> %2, <i64 52, i64 52>
25475  %4 = sext <2 x i1> %3 to <2 x i64>
25476  ret <2 x i64> %4
25477}
25478
25479define <2 x i64> @ugt_52_v2i64(<2 x i64> %0) {
25480; PWR5-LABEL: ugt_52_v2i64:
25481; PWR5:       # %bb.0:
25482; PWR5-NEXT:    lis 5, 21845
25483; PWR5-NEXT:    lis 6, 13107
25484; PWR5-NEXT:    ori 5, 5, 21845
25485; PWR5-NEXT:    rotldi 8, 4, 63
25486; PWR5-NEXT:    rotldi 9, 3, 63
25487; PWR5-NEXT:    rldimi 5, 5, 32, 0
25488; PWR5-NEXT:    and 8, 8, 5
25489; PWR5-NEXT:    and 5, 9, 5
25490; PWR5-NEXT:    ori 6, 6, 13107
25491; PWR5-NEXT:    sub 3, 3, 5
25492; PWR5-NEXT:    rldimi 6, 6, 32, 0
25493; PWR5-NEXT:    sub 4, 4, 8
25494; PWR5-NEXT:    and 8, 3, 6
25495; PWR5-NEXT:    rotldi 3, 3, 62
25496; PWR5-NEXT:    and 3, 3, 6
25497; PWR5-NEXT:    lis 7, 3855
25498; PWR5-NEXT:    and 5, 4, 6
25499; PWR5-NEXT:    rotldi 4, 4, 62
25500; PWR5-NEXT:    add 3, 8, 3
25501; PWR5-NEXT:    lis 9, 257
25502; PWR5-NEXT:    ori 7, 7, 3855
25503; PWR5-NEXT:    and 4, 4, 6
25504; PWR5-NEXT:    rldicl 6, 3, 60, 4
25505; PWR5-NEXT:    ori 9, 9, 257
25506; PWR5-NEXT:    rldimi 7, 7, 32, 0
25507; PWR5-NEXT:    add 4, 5, 4
25508; PWR5-NEXT:    add 3, 3, 6
25509; PWR5-NEXT:    rldimi 9, 9, 32, 0
25510; PWR5-NEXT:    rldicl 5, 4, 60, 4
25511; PWR5-NEXT:    and 3, 3, 7
25512; PWR5-NEXT:    add 4, 4, 5
25513; PWR5-NEXT:    mulld 3, 3, 9
25514; PWR5-NEXT:    and 4, 4, 7
25515; PWR5-NEXT:    rldicl 3, 3, 8, 56
25516; PWR5-NEXT:    mulld 4, 4, 9
25517; PWR5-NEXT:    li 5, 52
25518; PWR5-NEXT:    subfic 3, 3, 52
25519; PWR5-NEXT:    rldicl 4, 4, 8, 56
25520; PWR5-NEXT:    subfe 3, 5, 5
25521; PWR5-NEXT:    subfic 4, 4, 52
25522; PWR5-NEXT:    subfe 4, 5, 5
25523; PWR5-NEXT:    blr
25524;
25525; PWR6-LABEL: ugt_52_v2i64:
25526; PWR6:       # %bb.0:
25527; PWR6-NEXT:    lis 5, 21845
25528; PWR6-NEXT:    lis 6, 13107
25529; PWR6-NEXT:    ori 5, 5, 21845
25530; PWR6-NEXT:    rotldi 8, 4, 63
25531; PWR6-NEXT:    rotldi 9, 3, 63
25532; PWR6-NEXT:    rldimi 5, 5, 32, 0
25533; PWR6-NEXT:    and 8, 8, 5
25534; PWR6-NEXT:    and 5, 9, 5
25535; PWR6-NEXT:    ori 6, 6, 13107
25536; PWR6-NEXT:    sub 3, 3, 5
25537; PWR6-NEXT:    rldimi 6, 6, 32, 0
25538; PWR6-NEXT:    sub 4, 4, 8
25539; PWR6-NEXT:    and 8, 3, 6
25540; PWR6-NEXT:    rotldi 3, 3, 62
25541; PWR6-NEXT:    and 3, 3, 6
25542; PWR6-NEXT:    lis 7, 3855
25543; PWR6-NEXT:    and 5, 4, 6
25544; PWR6-NEXT:    rotldi 4, 4, 62
25545; PWR6-NEXT:    add 3, 8, 3
25546; PWR6-NEXT:    lis 9, 257
25547; PWR6-NEXT:    ori 7, 7, 3855
25548; PWR6-NEXT:    and 4, 4, 6
25549; PWR6-NEXT:    rldicl 6, 3, 60, 4
25550; PWR6-NEXT:    ori 9, 9, 257
25551; PWR6-NEXT:    rldimi 7, 7, 32, 0
25552; PWR6-NEXT:    add 4, 5, 4
25553; PWR6-NEXT:    add 3, 3, 6
25554; PWR6-NEXT:    rldimi 9, 9, 32, 0
25555; PWR6-NEXT:    rldicl 5, 4, 60, 4
25556; PWR6-NEXT:    and 3, 3, 7
25557; PWR6-NEXT:    add 4, 4, 5
25558; PWR6-NEXT:    mulld 3, 3, 9
25559; PWR6-NEXT:    and 4, 4, 7
25560; PWR6-NEXT:    rldicl 3, 3, 8, 56
25561; PWR6-NEXT:    mulld 4, 4, 9
25562; PWR6-NEXT:    li 5, 52
25563; PWR6-NEXT:    subfic 3, 3, 52
25564; PWR6-NEXT:    rldicl 4, 4, 8, 56
25565; PWR6-NEXT:    subfe 3, 5, 5
25566; PWR6-NEXT:    subfic 4, 4, 52
25567; PWR6-NEXT:    subfe 4, 5, 5
25568; PWR6-NEXT:    blr
25569;
25570; PWR7-LABEL: ugt_52_v2i64:
25571; PWR7:       # %bb.0:
25572; PWR7-NEXT:    addi 3, 1, -32
25573; PWR7-NEXT:    li 5, 0
25574; PWR7-NEXT:    li 6, -1
25575; PWR7-NEXT:    stxvd2x 34, 0, 3
25576; PWR7-NEXT:    ld 3, -24(1)
25577; PWR7-NEXT:    ld 4, -32(1)
25578; PWR7-NEXT:    popcntd 3, 3
25579; PWR7-NEXT:    popcntd 4, 4
25580; PWR7-NEXT:    cmpldi 3, 52
25581; PWR7-NEXT:    iselgt 3, 6, 5
25582; PWR7-NEXT:    cmpldi 4, 52
25583; PWR7-NEXT:    iselgt 4, 6, 5
25584; PWR7-NEXT:    std 3, -8(1)
25585; PWR7-NEXT:    addi 3, 1, -16
25586; PWR7-NEXT:    std 4, -16(1)
25587; PWR7-NEXT:    lxvd2x 34, 0, 3
25588; PWR7-NEXT:    blr
25589;
25590; PWR8-LABEL: ugt_52_v2i64:
25591; PWR8:       # %bb.0:
25592; PWR8-NEXT:    addis 3, 2, .LCPI202_0@toc@ha
25593; PWR8-NEXT:    vpopcntd 2, 2
25594; PWR8-NEXT:    addi 3, 3, .LCPI202_0@toc@l
25595; PWR8-NEXT:    lxvd2x 35, 0, 3
25596; PWR8-NEXT:    vcmpgtud 2, 2, 3
25597; PWR8-NEXT:    blr
25598;
25599; PWR9-LABEL: ugt_52_v2i64:
25600; PWR9:       # %bb.0:
25601; PWR9-NEXT:    addis 3, 2, .LCPI202_0@toc@ha
25602; PWR9-NEXT:    vpopcntd 2, 2
25603; PWR9-NEXT:    addi 3, 3, .LCPI202_0@toc@l
25604; PWR9-NEXT:    lxvx 35, 0, 3
25605; PWR9-NEXT:    vcmpgtud 2, 2, 3
25606; PWR9-NEXT:    blr
25607  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25608  %3 = icmp ugt <2 x i64> %2, <i64 52, i64 52>
25609  %4 = sext <2 x i1> %3 to <2 x i64>
25610  ret <2 x i64> %4
25611}
25612
25613define <2 x i64> @ult_53_v2i64(<2 x i64> %0) {
25614; PWR5-LABEL: ult_53_v2i64:
25615; PWR5:       # %bb.0:
25616; PWR5-NEXT:    lis 5, 21845
25617; PWR5-NEXT:    lis 6, 13107
25618; PWR5-NEXT:    ori 5, 5, 21845
25619; PWR5-NEXT:    rotldi 8, 4, 63
25620; PWR5-NEXT:    rotldi 9, 3, 63
25621; PWR5-NEXT:    rldimi 5, 5, 32, 0
25622; PWR5-NEXT:    and 8, 8, 5
25623; PWR5-NEXT:    and 5, 9, 5
25624; PWR5-NEXT:    ori 6, 6, 13107
25625; PWR5-NEXT:    sub 3, 3, 5
25626; PWR5-NEXT:    rldimi 6, 6, 32, 0
25627; PWR5-NEXT:    sub 4, 4, 8
25628; PWR5-NEXT:    and 8, 3, 6
25629; PWR5-NEXT:    rotldi 3, 3, 62
25630; PWR5-NEXT:    and 3, 3, 6
25631; PWR5-NEXT:    lis 7, 3855
25632; PWR5-NEXT:    and 5, 4, 6
25633; PWR5-NEXT:    rotldi 4, 4, 62
25634; PWR5-NEXT:    add 3, 8, 3
25635; PWR5-NEXT:    lis 9, 257
25636; PWR5-NEXT:    ori 7, 7, 3855
25637; PWR5-NEXT:    and 4, 4, 6
25638; PWR5-NEXT:    rldicl 6, 3, 60, 4
25639; PWR5-NEXT:    ori 9, 9, 257
25640; PWR5-NEXT:    rldimi 7, 7, 32, 0
25641; PWR5-NEXT:    add 4, 5, 4
25642; PWR5-NEXT:    add 3, 3, 6
25643; PWR5-NEXT:    rldimi 9, 9, 32, 0
25644; PWR5-NEXT:    rldicl 5, 4, 60, 4
25645; PWR5-NEXT:    and 3, 3, 7
25646; PWR5-NEXT:    add 4, 4, 5
25647; PWR5-NEXT:    mulld 3, 3, 9
25648; PWR5-NEXT:    and 4, 4, 7
25649; PWR5-NEXT:    rldicl 3, 3, 8, 56
25650; PWR5-NEXT:    li 5, 53
25651; PWR5-NEXT:    mulld 4, 4, 9
25652; PWR5-NEXT:    subc 6, 3, 5
25653; PWR5-NEXT:    rldicl 4, 4, 8, 56
25654; PWR5-NEXT:    subfe 3, 3, 3
25655; PWR5-NEXT:    subc 5, 4, 5
25656; PWR5-NEXT:    subfe 4, 4, 4
25657; PWR5-NEXT:    blr
25658;
25659; PWR6-LABEL: ult_53_v2i64:
25660; PWR6:       # %bb.0:
25661; PWR6-NEXT:    lis 5, 21845
25662; PWR6-NEXT:    lis 6, 13107
25663; PWR6-NEXT:    ori 5, 5, 21845
25664; PWR6-NEXT:    rotldi 8, 4, 63
25665; PWR6-NEXT:    rotldi 9, 3, 63
25666; PWR6-NEXT:    rldimi 5, 5, 32, 0
25667; PWR6-NEXT:    and 8, 8, 5
25668; PWR6-NEXT:    and 5, 9, 5
25669; PWR6-NEXT:    ori 6, 6, 13107
25670; PWR6-NEXT:    sub 3, 3, 5
25671; PWR6-NEXT:    rldimi 6, 6, 32, 0
25672; PWR6-NEXT:    sub 4, 4, 8
25673; PWR6-NEXT:    and 8, 3, 6
25674; PWR6-NEXT:    rotldi 3, 3, 62
25675; PWR6-NEXT:    and 3, 3, 6
25676; PWR6-NEXT:    lis 7, 3855
25677; PWR6-NEXT:    and 5, 4, 6
25678; PWR6-NEXT:    rotldi 4, 4, 62
25679; PWR6-NEXT:    add 3, 8, 3
25680; PWR6-NEXT:    lis 9, 257
25681; PWR6-NEXT:    ori 7, 7, 3855
25682; PWR6-NEXT:    and 4, 4, 6
25683; PWR6-NEXT:    rldicl 6, 3, 60, 4
25684; PWR6-NEXT:    ori 9, 9, 257
25685; PWR6-NEXT:    rldimi 7, 7, 32, 0
25686; PWR6-NEXT:    add 4, 5, 4
25687; PWR6-NEXT:    add 3, 3, 6
25688; PWR6-NEXT:    rldimi 9, 9, 32, 0
25689; PWR6-NEXT:    rldicl 5, 4, 60, 4
25690; PWR6-NEXT:    and 3, 3, 7
25691; PWR6-NEXT:    add 4, 4, 5
25692; PWR6-NEXT:    mulld 3, 3, 9
25693; PWR6-NEXT:    and 4, 4, 7
25694; PWR6-NEXT:    rldicl 3, 3, 8, 56
25695; PWR6-NEXT:    li 5, 53
25696; PWR6-NEXT:    mulld 4, 4, 9
25697; PWR6-NEXT:    subc 6, 3, 5
25698; PWR6-NEXT:    rldicl 4, 4, 8, 56
25699; PWR6-NEXT:    subfe 3, 3, 3
25700; PWR6-NEXT:    subc 5, 4, 5
25701; PWR6-NEXT:    subfe 4, 4, 4
25702; PWR6-NEXT:    blr
25703;
25704; PWR7-LABEL: ult_53_v2i64:
25705; PWR7:       # %bb.0:
25706; PWR7-NEXT:    addi 3, 1, -32
25707; PWR7-NEXT:    li 5, 0
25708; PWR7-NEXT:    li 6, -1
25709; PWR7-NEXT:    stxvd2x 34, 0, 3
25710; PWR7-NEXT:    ld 3, -24(1)
25711; PWR7-NEXT:    ld 4, -32(1)
25712; PWR7-NEXT:    popcntd 3, 3
25713; PWR7-NEXT:    popcntd 4, 4
25714; PWR7-NEXT:    cmpldi 3, 53
25715; PWR7-NEXT:    isellt 3, 6, 5
25716; PWR7-NEXT:    cmpldi 4, 53
25717; PWR7-NEXT:    isellt 4, 6, 5
25718; PWR7-NEXT:    std 3, -8(1)
25719; PWR7-NEXT:    addi 3, 1, -16
25720; PWR7-NEXT:    std 4, -16(1)
25721; PWR7-NEXT:    lxvd2x 34, 0, 3
25722; PWR7-NEXT:    blr
25723;
25724; PWR8-LABEL: ult_53_v2i64:
25725; PWR8:       # %bb.0:
25726; PWR8-NEXT:    addis 3, 2, .LCPI203_0@toc@ha
25727; PWR8-NEXT:    vpopcntd 2, 2
25728; PWR8-NEXT:    addi 3, 3, .LCPI203_0@toc@l
25729; PWR8-NEXT:    lxvd2x 35, 0, 3
25730; PWR8-NEXT:    vcmpgtud 2, 3, 2
25731; PWR8-NEXT:    blr
25732;
25733; PWR9-LABEL: ult_53_v2i64:
25734; PWR9:       # %bb.0:
25735; PWR9-NEXT:    addis 3, 2, .LCPI203_0@toc@ha
25736; PWR9-NEXT:    vpopcntd 2, 2
25737; PWR9-NEXT:    addi 3, 3, .LCPI203_0@toc@l
25738; PWR9-NEXT:    lxvx 35, 0, 3
25739; PWR9-NEXT:    vcmpgtud 2, 3, 2
25740; PWR9-NEXT:    blr
25741  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25742  %3 = icmp ult <2 x i64> %2, <i64 53, i64 53>
25743  %4 = sext <2 x i1> %3 to <2 x i64>
25744  ret <2 x i64> %4
25745}
25746
25747define <2 x i64> @ugt_53_v2i64(<2 x i64> %0) {
25748; PWR5-LABEL: ugt_53_v2i64:
25749; PWR5:       # %bb.0:
25750; PWR5-NEXT:    lis 5, 21845
25751; PWR5-NEXT:    lis 6, 13107
25752; PWR5-NEXT:    ori 5, 5, 21845
25753; PWR5-NEXT:    rotldi 8, 4, 63
25754; PWR5-NEXT:    rotldi 9, 3, 63
25755; PWR5-NEXT:    rldimi 5, 5, 32, 0
25756; PWR5-NEXT:    and 8, 8, 5
25757; PWR5-NEXT:    and 5, 9, 5
25758; PWR5-NEXT:    ori 6, 6, 13107
25759; PWR5-NEXT:    sub 3, 3, 5
25760; PWR5-NEXT:    rldimi 6, 6, 32, 0
25761; PWR5-NEXT:    sub 4, 4, 8
25762; PWR5-NEXT:    and 8, 3, 6
25763; PWR5-NEXT:    rotldi 3, 3, 62
25764; PWR5-NEXT:    and 3, 3, 6
25765; PWR5-NEXT:    lis 7, 3855
25766; PWR5-NEXT:    and 5, 4, 6
25767; PWR5-NEXT:    rotldi 4, 4, 62
25768; PWR5-NEXT:    add 3, 8, 3
25769; PWR5-NEXT:    lis 9, 257
25770; PWR5-NEXT:    ori 7, 7, 3855
25771; PWR5-NEXT:    and 4, 4, 6
25772; PWR5-NEXT:    rldicl 6, 3, 60, 4
25773; PWR5-NEXT:    ori 9, 9, 257
25774; PWR5-NEXT:    rldimi 7, 7, 32, 0
25775; PWR5-NEXT:    add 4, 5, 4
25776; PWR5-NEXT:    add 3, 3, 6
25777; PWR5-NEXT:    rldimi 9, 9, 32, 0
25778; PWR5-NEXT:    rldicl 5, 4, 60, 4
25779; PWR5-NEXT:    and 3, 3, 7
25780; PWR5-NEXT:    add 4, 4, 5
25781; PWR5-NEXT:    mulld 3, 3, 9
25782; PWR5-NEXT:    and 4, 4, 7
25783; PWR5-NEXT:    rldicl 3, 3, 8, 56
25784; PWR5-NEXT:    mulld 4, 4, 9
25785; PWR5-NEXT:    li 5, 53
25786; PWR5-NEXT:    subfic 3, 3, 53
25787; PWR5-NEXT:    rldicl 4, 4, 8, 56
25788; PWR5-NEXT:    subfe 3, 5, 5
25789; PWR5-NEXT:    subfic 4, 4, 53
25790; PWR5-NEXT:    subfe 4, 5, 5
25791; PWR5-NEXT:    blr
25792;
25793; PWR6-LABEL: ugt_53_v2i64:
25794; PWR6:       # %bb.0:
25795; PWR6-NEXT:    lis 5, 21845
25796; PWR6-NEXT:    lis 6, 13107
25797; PWR6-NEXT:    ori 5, 5, 21845
25798; PWR6-NEXT:    rotldi 8, 4, 63
25799; PWR6-NEXT:    rotldi 9, 3, 63
25800; PWR6-NEXT:    rldimi 5, 5, 32, 0
25801; PWR6-NEXT:    and 8, 8, 5
25802; PWR6-NEXT:    and 5, 9, 5
25803; PWR6-NEXT:    ori 6, 6, 13107
25804; PWR6-NEXT:    sub 3, 3, 5
25805; PWR6-NEXT:    rldimi 6, 6, 32, 0
25806; PWR6-NEXT:    sub 4, 4, 8
25807; PWR6-NEXT:    and 8, 3, 6
25808; PWR6-NEXT:    rotldi 3, 3, 62
25809; PWR6-NEXT:    and 3, 3, 6
25810; PWR6-NEXT:    lis 7, 3855
25811; PWR6-NEXT:    and 5, 4, 6
25812; PWR6-NEXT:    rotldi 4, 4, 62
25813; PWR6-NEXT:    add 3, 8, 3
25814; PWR6-NEXT:    lis 9, 257
25815; PWR6-NEXT:    ori 7, 7, 3855
25816; PWR6-NEXT:    and 4, 4, 6
25817; PWR6-NEXT:    rldicl 6, 3, 60, 4
25818; PWR6-NEXT:    ori 9, 9, 257
25819; PWR6-NEXT:    rldimi 7, 7, 32, 0
25820; PWR6-NEXT:    add 4, 5, 4
25821; PWR6-NEXT:    add 3, 3, 6
25822; PWR6-NEXT:    rldimi 9, 9, 32, 0
25823; PWR6-NEXT:    rldicl 5, 4, 60, 4
25824; PWR6-NEXT:    and 3, 3, 7
25825; PWR6-NEXT:    add 4, 4, 5
25826; PWR6-NEXT:    mulld 3, 3, 9
25827; PWR6-NEXT:    and 4, 4, 7
25828; PWR6-NEXT:    rldicl 3, 3, 8, 56
25829; PWR6-NEXT:    mulld 4, 4, 9
25830; PWR6-NEXT:    li 5, 53
25831; PWR6-NEXT:    subfic 3, 3, 53
25832; PWR6-NEXT:    rldicl 4, 4, 8, 56
25833; PWR6-NEXT:    subfe 3, 5, 5
25834; PWR6-NEXT:    subfic 4, 4, 53
25835; PWR6-NEXT:    subfe 4, 5, 5
25836; PWR6-NEXT:    blr
25837;
25838; PWR7-LABEL: ugt_53_v2i64:
25839; PWR7:       # %bb.0:
25840; PWR7-NEXT:    addi 3, 1, -32
25841; PWR7-NEXT:    li 5, 0
25842; PWR7-NEXT:    li 6, -1
25843; PWR7-NEXT:    stxvd2x 34, 0, 3
25844; PWR7-NEXT:    ld 3, -24(1)
25845; PWR7-NEXT:    ld 4, -32(1)
25846; PWR7-NEXT:    popcntd 3, 3
25847; PWR7-NEXT:    popcntd 4, 4
25848; PWR7-NEXT:    cmpldi 3, 53
25849; PWR7-NEXT:    iselgt 3, 6, 5
25850; PWR7-NEXT:    cmpldi 4, 53
25851; PWR7-NEXT:    iselgt 4, 6, 5
25852; PWR7-NEXT:    std 3, -8(1)
25853; PWR7-NEXT:    addi 3, 1, -16
25854; PWR7-NEXT:    std 4, -16(1)
25855; PWR7-NEXT:    lxvd2x 34, 0, 3
25856; PWR7-NEXT:    blr
25857;
25858; PWR8-LABEL: ugt_53_v2i64:
25859; PWR8:       # %bb.0:
25860; PWR8-NEXT:    addis 3, 2, .LCPI204_0@toc@ha
25861; PWR8-NEXT:    vpopcntd 2, 2
25862; PWR8-NEXT:    addi 3, 3, .LCPI204_0@toc@l
25863; PWR8-NEXT:    lxvd2x 35, 0, 3
25864; PWR8-NEXT:    vcmpgtud 2, 2, 3
25865; PWR8-NEXT:    blr
25866;
25867; PWR9-LABEL: ugt_53_v2i64:
25868; PWR9:       # %bb.0:
25869; PWR9-NEXT:    addis 3, 2, .LCPI204_0@toc@ha
25870; PWR9-NEXT:    vpopcntd 2, 2
25871; PWR9-NEXT:    addi 3, 3, .LCPI204_0@toc@l
25872; PWR9-NEXT:    lxvx 35, 0, 3
25873; PWR9-NEXT:    vcmpgtud 2, 2, 3
25874; PWR9-NEXT:    blr
25875  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
25876  %3 = icmp ugt <2 x i64> %2, <i64 53, i64 53>
25877  %4 = sext <2 x i1> %3 to <2 x i64>
25878  ret <2 x i64> %4
25879}
25880
25881define <2 x i64> @ult_54_v2i64(<2 x i64> %0) {
25882; PWR5-LABEL: ult_54_v2i64:
25883; PWR5:       # %bb.0:
25884; PWR5-NEXT:    lis 5, 21845
25885; PWR5-NEXT:    lis 6, 13107
25886; PWR5-NEXT:    ori 5, 5, 21845
25887; PWR5-NEXT:    rotldi 8, 4, 63
25888; PWR5-NEXT:    rotldi 9, 3, 63
25889; PWR5-NEXT:    rldimi 5, 5, 32, 0
25890; PWR5-NEXT:    and 8, 8, 5
25891; PWR5-NEXT:    and 5, 9, 5
25892; PWR5-NEXT:    ori 6, 6, 13107
25893; PWR5-NEXT:    sub 3, 3, 5
25894; PWR5-NEXT:    rldimi 6, 6, 32, 0
25895; PWR5-NEXT:    sub 4, 4, 8
25896; PWR5-NEXT:    and 8, 3, 6
25897; PWR5-NEXT:    rotldi 3, 3, 62
25898; PWR5-NEXT:    and 3, 3, 6
25899; PWR5-NEXT:    lis 7, 3855
25900; PWR5-NEXT:    and 5, 4, 6
25901; PWR5-NEXT:    rotldi 4, 4, 62
25902; PWR5-NEXT:    add 3, 8, 3
25903; PWR5-NEXT:    lis 9, 257
25904; PWR5-NEXT:    ori 7, 7, 3855
25905; PWR5-NEXT:    and 4, 4, 6
25906; PWR5-NEXT:    rldicl 6, 3, 60, 4
25907; PWR5-NEXT:    ori 9, 9, 257
25908; PWR5-NEXT:    rldimi 7, 7, 32, 0
25909; PWR5-NEXT:    add 4, 5, 4
25910; PWR5-NEXT:    add 3, 3, 6
25911; PWR5-NEXT:    rldimi 9, 9, 32, 0
25912; PWR5-NEXT:    rldicl 5, 4, 60, 4
25913; PWR5-NEXT:    and 3, 3, 7
25914; PWR5-NEXT:    add 4, 4, 5
25915; PWR5-NEXT:    mulld 3, 3, 9
25916; PWR5-NEXT:    and 4, 4, 7
25917; PWR5-NEXT:    rldicl 3, 3, 8, 56
25918; PWR5-NEXT:    li 5, 54
25919; PWR5-NEXT:    mulld 4, 4, 9
25920; PWR5-NEXT:    subc 6, 3, 5
25921; PWR5-NEXT:    rldicl 4, 4, 8, 56
25922; PWR5-NEXT:    subfe 3, 3, 3
25923; PWR5-NEXT:    subc 5, 4, 5
25924; PWR5-NEXT:    subfe 4, 4, 4
25925; PWR5-NEXT:    blr
25926;
25927; PWR6-LABEL: ult_54_v2i64:
25928; PWR6:       # %bb.0:
25929; PWR6-NEXT:    lis 5, 21845
25930; PWR6-NEXT:    lis 6, 13107
25931; PWR6-NEXT:    ori 5, 5, 21845
25932; PWR6-NEXT:    rotldi 8, 4, 63
25933; PWR6-NEXT:    rotldi 9, 3, 63
25934; PWR6-NEXT:    rldimi 5, 5, 32, 0
25935; PWR6-NEXT:    and 8, 8, 5
25936; PWR6-NEXT:    and 5, 9, 5
25937; PWR6-NEXT:    ori 6, 6, 13107
25938; PWR6-NEXT:    sub 3, 3, 5
25939; PWR6-NEXT:    rldimi 6, 6, 32, 0
25940; PWR6-NEXT:    sub 4, 4, 8
25941; PWR6-NEXT:    and 8, 3, 6
25942; PWR6-NEXT:    rotldi 3, 3, 62
25943; PWR6-NEXT:    and 3, 3, 6
25944; PWR6-NEXT:    lis 7, 3855
25945; PWR6-NEXT:    and 5, 4, 6
25946; PWR6-NEXT:    rotldi 4, 4, 62
25947; PWR6-NEXT:    add 3, 8, 3
25948; PWR6-NEXT:    lis 9, 257
25949; PWR6-NEXT:    ori 7, 7, 3855
25950; PWR6-NEXT:    and 4, 4, 6
25951; PWR6-NEXT:    rldicl 6, 3, 60, 4
25952; PWR6-NEXT:    ori 9, 9, 257
25953; PWR6-NEXT:    rldimi 7, 7, 32, 0
25954; PWR6-NEXT:    add 4, 5, 4
25955; PWR6-NEXT:    add 3, 3, 6
25956; PWR6-NEXT:    rldimi 9, 9, 32, 0
25957; PWR6-NEXT:    rldicl 5, 4, 60, 4
25958; PWR6-NEXT:    and 3, 3, 7
25959; PWR6-NEXT:    add 4, 4, 5
25960; PWR6-NEXT:    mulld 3, 3, 9
25961; PWR6-NEXT:    and 4, 4, 7
25962; PWR6-NEXT:    rldicl 3, 3, 8, 56
25963; PWR6-NEXT:    li 5, 54
25964; PWR6-NEXT:    mulld 4, 4, 9
25965; PWR6-NEXT:    subc 6, 3, 5
25966; PWR6-NEXT:    rldicl 4, 4, 8, 56
25967; PWR6-NEXT:    subfe 3, 3, 3
25968; PWR6-NEXT:    subc 5, 4, 5
25969; PWR6-NEXT:    subfe 4, 4, 4
25970; PWR6-NEXT:    blr
25971;
25972; PWR7-LABEL: ult_54_v2i64:
25973; PWR7:       # %bb.0:
25974; PWR7-NEXT:    addi 3, 1, -32
25975; PWR7-NEXT:    li 5, 0
25976; PWR7-NEXT:    li 6, -1
25977; PWR7-NEXT:    stxvd2x 34, 0, 3
25978; PWR7-NEXT:    ld 3, -24(1)
25979; PWR7-NEXT:    ld 4, -32(1)
25980; PWR7-NEXT:    popcntd 3, 3
25981; PWR7-NEXT:    popcntd 4, 4
25982; PWR7-NEXT:    cmpldi 3, 54
25983; PWR7-NEXT:    isellt 3, 6, 5
25984; PWR7-NEXT:    cmpldi 4, 54
25985; PWR7-NEXT:    isellt 4, 6, 5
25986; PWR7-NEXT:    std 3, -8(1)
25987; PWR7-NEXT:    addi 3, 1, -16
25988; PWR7-NEXT:    std 4, -16(1)
25989; PWR7-NEXT:    lxvd2x 34, 0, 3
25990; PWR7-NEXT:    blr
25991;
25992; PWR8-LABEL: ult_54_v2i64:
25993; PWR8:       # %bb.0:
25994; PWR8-NEXT:    addis 3, 2, .LCPI205_0@toc@ha
25995; PWR8-NEXT:    vpopcntd 2, 2
25996; PWR8-NEXT:    addi 3, 3, .LCPI205_0@toc@l
25997; PWR8-NEXT:    lxvd2x 35, 0, 3
25998; PWR8-NEXT:    vcmpgtud 2, 3, 2
25999; PWR8-NEXT:    blr
26000;
26001; PWR9-LABEL: ult_54_v2i64:
26002; PWR9:       # %bb.0:
26003; PWR9-NEXT:    addis 3, 2, .LCPI205_0@toc@ha
26004; PWR9-NEXT:    vpopcntd 2, 2
26005; PWR9-NEXT:    addi 3, 3, .LCPI205_0@toc@l
26006; PWR9-NEXT:    lxvx 35, 0, 3
26007; PWR9-NEXT:    vcmpgtud 2, 3, 2
26008; PWR9-NEXT:    blr
26009  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26010  %3 = icmp ult <2 x i64> %2, <i64 54, i64 54>
26011  %4 = sext <2 x i1> %3 to <2 x i64>
26012  ret <2 x i64> %4
26013}
26014
26015define <2 x i64> @ugt_54_v2i64(<2 x i64> %0) {
26016; PWR5-LABEL: ugt_54_v2i64:
26017; PWR5:       # %bb.0:
26018; PWR5-NEXT:    lis 5, 21845
26019; PWR5-NEXT:    lis 6, 13107
26020; PWR5-NEXT:    ori 5, 5, 21845
26021; PWR5-NEXT:    rotldi 8, 4, 63
26022; PWR5-NEXT:    rotldi 9, 3, 63
26023; PWR5-NEXT:    rldimi 5, 5, 32, 0
26024; PWR5-NEXT:    and 8, 8, 5
26025; PWR5-NEXT:    and 5, 9, 5
26026; PWR5-NEXT:    ori 6, 6, 13107
26027; PWR5-NEXT:    sub 3, 3, 5
26028; PWR5-NEXT:    rldimi 6, 6, 32, 0
26029; PWR5-NEXT:    sub 4, 4, 8
26030; PWR5-NEXT:    and 8, 3, 6
26031; PWR5-NEXT:    rotldi 3, 3, 62
26032; PWR5-NEXT:    and 3, 3, 6
26033; PWR5-NEXT:    lis 7, 3855
26034; PWR5-NEXT:    and 5, 4, 6
26035; PWR5-NEXT:    rotldi 4, 4, 62
26036; PWR5-NEXT:    add 3, 8, 3
26037; PWR5-NEXT:    lis 9, 257
26038; PWR5-NEXT:    ori 7, 7, 3855
26039; PWR5-NEXT:    and 4, 4, 6
26040; PWR5-NEXT:    rldicl 6, 3, 60, 4
26041; PWR5-NEXT:    ori 9, 9, 257
26042; PWR5-NEXT:    rldimi 7, 7, 32, 0
26043; PWR5-NEXT:    add 4, 5, 4
26044; PWR5-NEXT:    add 3, 3, 6
26045; PWR5-NEXT:    rldimi 9, 9, 32, 0
26046; PWR5-NEXT:    rldicl 5, 4, 60, 4
26047; PWR5-NEXT:    and 3, 3, 7
26048; PWR5-NEXT:    add 4, 4, 5
26049; PWR5-NEXT:    mulld 3, 3, 9
26050; PWR5-NEXT:    and 4, 4, 7
26051; PWR5-NEXT:    rldicl 3, 3, 8, 56
26052; PWR5-NEXT:    mulld 4, 4, 9
26053; PWR5-NEXT:    li 5, 54
26054; PWR5-NEXT:    subfic 3, 3, 54
26055; PWR5-NEXT:    rldicl 4, 4, 8, 56
26056; PWR5-NEXT:    subfe 3, 5, 5
26057; PWR5-NEXT:    subfic 4, 4, 54
26058; PWR5-NEXT:    subfe 4, 5, 5
26059; PWR5-NEXT:    blr
26060;
26061; PWR6-LABEL: ugt_54_v2i64:
26062; PWR6:       # %bb.0:
26063; PWR6-NEXT:    lis 5, 21845
26064; PWR6-NEXT:    lis 6, 13107
26065; PWR6-NEXT:    ori 5, 5, 21845
26066; PWR6-NEXT:    rotldi 8, 4, 63
26067; PWR6-NEXT:    rotldi 9, 3, 63
26068; PWR6-NEXT:    rldimi 5, 5, 32, 0
26069; PWR6-NEXT:    and 8, 8, 5
26070; PWR6-NEXT:    and 5, 9, 5
26071; PWR6-NEXT:    ori 6, 6, 13107
26072; PWR6-NEXT:    sub 3, 3, 5
26073; PWR6-NEXT:    rldimi 6, 6, 32, 0
26074; PWR6-NEXT:    sub 4, 4, 8
26075; PWR6-NEXT:    and 8, 3, 6
26076; PWR6-NEXT:    rotldi 3, 3, 62
26077; PWR6-NEXT:    and 3, 3, 6
26078; PWR6-NEXT:    lis 7, 3855
26079; PWR6-NEXT:    and 5, 4, 6
26080; PWR6-NEXT:    rotldi 4, 4, 62
26081; PWR6-NEXT:    add 3, 8, 3
26082; PWR6-NEXT:    lis 9, 257
26083; PWR6-NEXT:    ori 7, 7, 3855
26084; PWR6-NEXT:    and 4, 4, 6
26085; PWR6-NEXT:    rldicl 6, 3, 60, 4
26086; PWR6-NEXT:    ori 9, 9, 257
26087; PWR6-NEXT:    rldimi 7, 7, 32, 0
26088; PWR6-NEXT:    add 4, 5, 4
26089; PWR6-NEXT:    add 3, 3, 6
26090; PWR6-NEXT:    rldimi 9, 9, 32, 0
26091; PWR6-NEXT:    rldicl 5, 4, 60, 4
26092; PWR6-NEXT:    and 3, 3, 7
26093; PWR6-NEXT:    add 4, 4, 5
26094; PWR6-NEXT:    mulld 3, 3, 9
26095; PWR6-NEXT:    and 4, 4, 7
26096; PWR6-NEXT:    rldicl 3, 3, 8, 56
26097; PWR6-NEXT:    mulld 4, 4, 9
26098; PWR6-NEXT:    li 5, 54
26099; PWR6-NEXT:    subfic 3, 3, 54
26100; PWR6-NEXT:    rldicl 4, 4, 8, 56
26101; PWR6-NEXT:    subfe 3, 5, 5
26102; PWR6-NEXT:    subfic 4, 4, 54
26103; PWR6-NEXT:    subfe 4, 5, 5
26104; PWR6-NEXT:    blr
26105;
26106; PWR7-LABEL: ugt_54_v2i64:
26107; PWR7:       # %bb.0:
26108; PWR7-NEXT:    addi 3, 1, -32
26109; PWR7-NEXT:    li 5, 0
26110; PWR7-NEXT:    li 6, -1
26111; PWR7-NEXT:    stxvd2x 34, 0, 3
26112; PWR7-NEXT:    ld 3, -24(1)
26113; PWR7-NEXT:    ld 4, -32(1)
26114; PWR7-NEXT:    popcntd 3, 3
26115; PWR7-NEXT:    popcntd 4, 4
26116; PWR7-NEXT:    cmpldi 3, 54
26117; PWR7-NEXT:    iselgt 3, 6, 5
26118; PWR7-NEXT:    cmpldi 4, 54
26119; PWR7-NEXT:    iselgt 4, 6, 5
26120; PWR7-NEXT:    std 3, -8(1)
26121; PWR7-NEXT:    addi 3, 1, -16
26122; PWR7-NEXT:    std 4, -16(1)
26123; PWR7-NEXT:    lxvd2x 34, 0, 3
26124; PWR7-NEXT:    blr
26125;
26126; PWR8-LABEL: ugt_54_v2i64:
26127; PWR8:       # %bb.0:
26128; PWR8-NEXT:    addis 3, 2, .LCPI206_0@toc@ha
26129; PWR8-NEXT:    vpopcntd 2, 2
26130; PWR8-NEXT:    addi 3, 3, .LCPI206_0@toc@l
26131; PWR8-NEXT:    lxvd2x 35, 0, 3
26132; PWR8-NEXT:    vcmpgtud 2, 2, 3
26133; PWR8-NEXT:    blr
26134;
26135; PWR9-LABEL: ugt_54_v2i64:
26136; PWR9:       # %bb.0:
26137; PWR9-NEXT:    addis 3, 2, .LCPI206_0@toc@ha
26138; PWR9-NEXT:    vpopcntd 2, 2
26139; PWR9-NEXT:    addi 3, 3, .LCPI206_0@toc@l
26140; PWR9-NEXT:    lxvx 35, 0, 3
26141; PWR9-NEXT:    vcmpgtud 2, 2, 3
26142; PWR9-NEXT:    blr
26143  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26144  %3 = icmp ugt <2 x i64> %2, <i64 54, i64 54>
26145  %4 = sext <2 x i1> %3 to <2 x i64>
26146  ret <2 x i64> %4
26147}
26148
26149define <2 x i64> @ult_55_v2i64(<2 x i64> %0) {
26150; PWR5-LABEL: ult_55_v2i64:
26151; PWR5:       # %bb.0:
26152; PWR5-NEXT:    lis 5, 21845
26153; PWR5-NEXT:    lis 6, 13107
26154; PWR5-NEXT:    ori 5, 5, 21845
26155; PWR5-NEXT:    rotldi 8, 4, 63
26156; PWR5-NEXT:    rotldi 9, 3, 63
26157; PWR5-NEXT:    rldimi 5, 5, 32, 0
26158; PWR5-NEXT:    and 8, 8, 5
26159; PWR5-NEXT:    and 5, 9, 5
26160; PWR5-NEXT:    ori 6, 6, 13107
26161; PWR5-NEXT:    sub 3, 3, 5
26162; PWR5-NEXT:    rldimi 6, 6, 32, 0
26163; PWR5-NEXT:    sub 4, 4, 8
26164; PWR5-NEXT:    and 8, 3, 6
26165; PWR5-NEXT:    rotldi 3, 3, 62
26166; PWR5-NEXT:    and 3, 3, 6
26167; PWR5-NEXT:    lis 7, 3855
26168; PWR5-NEXT:    and 5, 4, 6
26169; PWR5-NEXT:    rotldi 4, 4, 62
26170; PWR5-NEXT:    add 3, 8, 3
26171; PWR5-NEXT:    lis 9, 257
26172; PWR5-NEXT:    ori 7, 7, 3855
26173; PWR5-NEXT:    and 4, 4, 6
26174; PWR5-NEXT:    rldicl 6, 3, 60, 4
26175; PWR5-NEXT:    ori 9, 9, 257
26176; PWR5-NEXT:    rldimi 7, 7, 32, 0
26177; PWR5-NEXT:    add 4, 5, 4
26178; PWR5-NEXT:    add 3, 3, 6
26179; PWR5-NEXT:    rldimi 9, 9, 32, 0
26180; PWR5-NEXT:    rldicl 5, 4, 60, 4
26181; PWR5-NEXT:    and 3, 3, 7
26182; PWR5-NEXT:    add 4, 4, 5
26183; PWR5-NEXT:    mulld 3, 3, 9
26184; PWR5-NEXT:    and 4, 4, 7
26185; PWR5-NEXT:    rldicl 3, 3, 8, 56
26186; PWR5-NEXT:    li 5, 55
26187; PWR5-NEXT:    mulld 4, 4, 9
26188; PWR5-NEXT:    subc 6, 3, 5
26189; PWR5-NEXT:    rldicl 4, 4, 8, 56
26190; PWR5-NEXT:    subfe 3, 3, 3
26191; PWR5-NEXT:    subc 5, 4, 5
26192; PWR5-NEXT:    subfe 4, 4, 4
26193; PWR5-NEXT:    blr
26194;
26195; PWR6-LABEL: ult_55_v2i64:
26196; PWR6:       # %bb.0:
26197; PWR6-NEXT:    lis 5, 21845
26198; PWR6-NEXT:    lis 6, 13107
26199; PWR6-NEXT:    ori 5, 5, 21845
26200; PWR6-NEXT:    rotldi 8, 4, 63
26201; PWR6-NEXT:    rotldi 9, 3, 63
26202; PWR6-NEXT:    rldimi 5, 5, 32, 0
26203; PWR6-NEXT:    and 8, 8, 5
26204; PWR6-NEXT:    and 5, 9, 5
26205; PWR6-NEXT:    ori 6, 6, 13107
26206; PWR6-NEXT:    sub 3, 3, 5
26207; PWR6-NEXT:    rldimi 6, 6, 32, 0
26208; PWR6-NEXT:    sub 4, 4, 8
26209; PWR6-NEXT:    and 8, 3, 6
26210; PWR6-NEXT:    rotldi 3, 3, 62
26211; PWR6-NEXT:    and 3, 3, 6
26212; PWR6-NEXT:    lis 7, 3855
26213; PWR6-NEXT:    and 5, 4, 6
26214; PWR6-NEXT:    rotldi 4, 4, 62
26215; PWR6-NEXT:    add 3, 8, 3
26216; PWR6-NEXT:    lis 9, 257
26217; PWR6-NEXT:    ori 7, 7, 3855
26218; PWR6-NEXT:    and 4, 4, 6
26219; PWR6-NEXT:    rldicl 6, 3, 60, 4
26220; PWR6-NEXT:    ori 9, 9, 257
26221; PWR6-NEXT:    rldimi 7, 7, 32, 0
26222; PWR6-NEXT:    add 4, 5, 4
26223; PWR6-NEXT:    add 3, 3, 6
26224; PWR6-NEXT:    rldimi 9, 9, 32, 0
26225; PWR6-NEXT:    rldicl 5, 4, 60, 4
26226; PWR6-NEXT:    and 3, 3, 7
26227; PWR6-NEXT:    add 4, 4, 5
26228; PWR6-NEXT:    mulld 3, 3, 9
26229; PWR6-NEXT:    and 4, 4, 7
26230; PWR6-NEXT:    rldicl 3, 3, 8, 56
26231; PWR6-NEXT:    li 5, 55
26232; PWR6-NEXT:    mulld 4, 4, 9
26233; PWR6-NEXT:    subc 6, 3, 5
26234; PWR6-NEXT:    rldicl 4, 4, 8, 56
26235; PWR6-NEXT:    subfe 3, 3, 3
26236; PWR6-NEXT:    subc 5, 4, 5
26237; PWR6-NEXT:    subfe 4, 4, 4
26238; PWR6-NEXT:    blr
26239;
26240; PWR7-LABEL: ult_55_v2i64:
26241; PWR7:       # %bb.0:
26242; PWR7-NEXT:    addi 3, 1, -32
26243; PWR7-NEXT:    li 5, 0
26244; PWR7-NEXT:    li 6, -1
26245; PWR7-NEXT:    stxvd2x 34, 0, 3
26246; PWR7-NEXT:    ld 3, -24(1)
26247; PWR7-NEXT:    ld 4, -32(1)
26248; PWR7-NEXT:    popcntd 3, 3
26249; PWR7-NEXT:    popcntd 4, 4
26250; PWR7-NEXT:    cmpldi 3, 55
26251; PWR7-NEXT:    isellt 3, 6, 5
26252; PWR7-NEXT:    cmpldi 4, 55
26253; PWR7-NEXT:    isellt 4, 6, 5
26254; PWR7-NEXT:    std 3, -8(1)
26255; PWR7-NEXT:    addi 3, 1, -16
26256; PWR7-NEXT:    std 4, -16(1)
26257; PWR7-NEXT:    lxvd2x 34, 0, 3
26258; PWR7-NEXT:    blr
26259;
26260; PWR8-LABEL: ult_55_v2i64:
26261; PWR8:       # %bb.0:
26262; PWR8-NEXT:    addis 3, 2, .LCPI207_0@toc@ha
26263; PWR8-NEXT:    vpopcntd 2, 2
26264; PWR8-NEXT:    addi 3, 3, .LCPI207_0@toc@l
26265; PWR8-NEXT:    lxvd2x 35, 0, 3
26266; PWR8-NEXT:    vcmpgtud 2, 3, 2
26267; PWR8-NEXT:    blr
26268;
26269; PWR9-LABEL: ult_55_v2i64:
26270; PWR9:       # %bb.0:
26271; PWR9-NEXT:    addis 3, 2, .LCPI207_0@toc@ha
26272; PWR9-NEXT:    vpopcntd 2, 2
26273; PWR9-NEXT:    addi 3, 3, .LCPI207_0@toc@l
26274; PWR9-NEXT:    lxvx 35, 0, 3
26275; PWR9-NEXT:    vcmpgtud 2, 3, 2
26276; PWR9-NEXT:    blr
26277  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26278  %3 = icmp ult <2 x i64> %2, <i64 55, i64 55>
26279  %4 = sext <2 x i1> %3 to <2 x i64>
26280  ret <2 x i64> %4
26281}
26282
26283define <2 x i64> @ugt_55_v2i64(<2 x i64> %0) {
26284; PWR5-LABEL: ugt_55_v2i64:
26285; PWR5:       # %bb.0:
26286; PWR5-NEXT:    lis 5, 21845
26287; PWR5-NEXT:    lis 6, 13107
26288; PWR5-NEXT:    ori 5, 5, 21845
26289; PWR5-NEXT:    rotldi 8, 4, 63
26290; PWR5-NEXT:    rotldi 9, 3, 63
26291; PWR5-NEXT:    rldimi 5, 5, 32, 0
26292; PWR5-NEXT:    and 8, 8, 5
26293; PWR5-NEXT:    and 5, 9, 5
26294; PWR5-NEXT:    ori 6, 6, 13107
26295; PWR5-NEXT:    sub 3, 3, 5
26296; PWR5-NEXT:    rldimi 6, 6, 32, 0
26297; PWR5-NEXT:    sub 4, 4, 8
26298; PWR5-NEXT:    and 8, 3, 6
26299; PWR5-NEXT:    rotldi 3, 3, 62
26300; PWR5-NEXT:    and 3, 3, 6
26301; PWR5-NEXT:    lis 7, 3855
26302; PWR5-NEXT:    and 5, 4, 6
26303; PWR5-NEXT:    rotldi 4, 4, 62
26304; PWR5-NEXT:    add 3, 8, 3
26305; PWR5-NEXT:    lis 9, 257
26306; PWR5-NEXT:    ori 7, 7, 3855
26307; PWR5-NEXT:    and 4, 4, 6
26308; PWR5-NEXT:    rldicl 6, 3, 60, 4
26309; PWR5-NEXT:    ori 9, 9, 257
26310; PWR5-NEXT:    rldimi 7, 7, 32, 0
26311; PWR5-NEXT:    add 4, 5, 4
26312; PWR5-NEXT:    add 3, 3, 6
26313; PWR5-NEXT:    rldimi 9, 9, 32, 0
26314; PWR5-NEXT:    rldicl 5, 4, 60, 4
26315; PWR5-NEXT:    and 3, 3, 7
26316; PWR5-NEXT:    add 4, 4, 5
26317; PWR5-NEXT:    mulld 3, 3, 9
26318; PWR5-NEXT:    and 4, 4, 7
26319; PWR5-NEXT:    rldicl 3, 3, 8, 56
26320; PWR5-NEXT:    mulld 4, 4, 9
26321; PWR5-NEXT:    li 5, 55
26322; PWR5-NEXT:    subfic 3, 3, 55
26323; PWR5-NEXT:    rldicl 4, 4, 8, 56
26324; PWR5-NEXT:    subfe 3, 5, 5
26325; PWR5-NEXT:    subfic 4, 4, 55
26326; PWR5-NEXT:    subfe 4, 5, 5
26327; PWR5-NEXT:    blr
26328;
26329; PWR6-LABEL: ugt_55_v2i64:
26330; PWR6:       # %bb.0:
26331; PWR6-NEXT:    lis 5, 21845
26332; PWR6-NEXT:    lis 6, 13107
26333; PWR6-NEXT:    ori 5, 5, 21845
26334; PWR6-NEXT:    rotldi 8, 4, 63
26335; PWR6-NEXT:    rotldi 9, 3, 63
26336; PWR6-NEXT:    rldimi 5, 5, 32, 0
26337; PWR6-NEXT:    and 8, 8, 5
26338; PWR6-NEXT:    and 5, 9, 5
26339; PWR6-NEXT:    ori 6, 6, 13107
26340; PWR6-NEXT:    sub 3, 3, 5
26341; PWR6-NEXT:    rldimi 6, 6, 32, 0
26342; PWR6-NEXT:    sub 4, 4, 8
26343; PWR6-NEXT:    and 8, 3, 6
26344; PWR6-NEXT:    rotldi 3, 3, 62
26345; PWR6-NEXT:    and 3, 3, 6
26346; PWR6-NEXT:    lis 7, 3855
26347; PWR6-NEXT:    and 5, 4, 6
26348; PWR6-NEXT:    rotldi 4, 4, 62
26349; PWR6-NEXT:    add 3, 8, 3
26350; PWR6-NEXT:    lis 9, 257
26351; PWR6-NEXT:    ori 7, 7, 3855
26352; PWR6-NEXT:    and 4, 4, 6
26353; PWR6-NEXT:    rldicl 6, 3, 60, 4
26354; PWR6-NEXT:    ori 9, 9, 257
26355; PWR6-NEXT:    rldimi 7, 7, 32, 0
26356; PWR6-NEXT:    add 4, 5, 4
26357; PWR6-NEXT:    add 3, 3, 6
26358; PWR6-NEXT:    rldimi 9, 9, 32, 0
26359; PWR6-NEXT:    rldicl 5, 4, 60, 4
26360; PWR6-NEXT:    and 3, 3, 7
26361; PWR6-NEXT:    add 4, 4, 5
26362; PWR6-NEXT:    mulld 3, 3, 9
26363; PWR6-NEXT:    and 4, 4, 7
26364; PWR6-NEXT:    rldicl 3, 3, 8, 56
26365; PWR6-NEXT:    mulld 4, 4, 9
26366; PWR6-NEXT:    li 5, 55
26367; PWR6-NEXT:    subfic 3, 3, 55
26368; PWR6-NEXT:    rldicl 4, 4, 8, 56
26369; PWR6-NEXT:    subfe 3, 5, 5
26370; PWR6-NEXT:    subfic 4, 4, 55
26371; PWR6-NEXT:    subfe 4, 5, 5
26372; PWR6-NEXT:    blr
26373;
26374; PWR7-LABEL: ugt_55_v2i64:
26375; PWR7:       # %bb.0:
26376; PWR7-NEXT:    addi 3, 1, -32
26377; PWR7-NEXT:    li 5, 0
26378; PWR7-NEXT:    li 6, -1
26379; PWR7-NEXT:    stxvd2x 34, 0, 3
26380; PWR7-NEXT:    ld 3, -24(1)
26381; PWR7-NEXT:    ld 4, -32(1)
26382; PWR7-NEXT:    popcntd 3, 3
26383; PWR7-NEXT:    popcntd 4, 4
26384; PWR7-NEXT:    cmpldi 3, 55
26385; PWR7-NEXT:    iselgt 3, 6, 5
26386; PWR7-NEXT:    cmpldi 4, 55
26387; PWR7-NEXT:    iselgt 4, 6, 5
26388; PWR7-NEXT:    std 3, -8(1)
26389; PWR7-NEXT:    addi 3, 1, -16
26390; PWR7-NEXT:    std 4, -16(1)
26391; PWR7-NEXT:    lxvd2x 34, 0, 3
26392; PWR7-NEXT:    blr
26393;
26394; PWR8-LABEL: ugt_55_v2i64:
26395; PWR8:       # %bb.0:
26396; PWR8-NEXT:    addis 3, 2, .LCPI208_0@toc@ha
26397; PWR8-NEXT:    vpopcntd 2, 2
26398; PWR8-NEXT:    addi 3, 3, .LCPI208_0@toc@l
26399; PWR8-NEXT:    lxvd2x 35, 0, 3
26400; PWR8-NEXT:    vcmpgtud 2, 2, 3
26401; PWR8-NEXT:    blr
26402;
26403; PWR9-LABEL: ugt_55_v2i64:
26404; PWR9:       # %bb.0:
26405; PWR9-NEXT:    addis 3, 2, .LCPI208_0@toc@ha
26406; PWR9-NEXT:    vpopcntd 2, 2
26407; PWR9-NEXT:    addi 3, 3, .LCPI208_0@toc@l
26408; PWR9-NEXT:    lxvx 35, 0, 3
26409; PWR9-NEXT:    vcmpgtud 2, 2, 3
26410; PWR9-NEXT:    blr
26411  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26412  %3 = icmp ugt <2 x i64> %2, <i64 55, i64 55>
26413  %4 = sext <2 x i1> %3 to <2 x i64>
26414  ret <2 x i64> %4
26415}
26416
26417define <2 x i64> @ult_56_v2i64(<2 x i64> %0) {
26418; PWR5-LABEL: ult_56_v2i64:
26419; PWR5:       # %bb.0:
26420; PWR5-NEXT:    lis 5, 21845
26421; PWR5-NEXT:    lis 6, 13107
26422; PWR5-NEXT:    ori 5, 5, 21845
26423; PWR5-NEXT:    rotldi 8, 4, 63
26424; PWR5-NEXT:    rotldi 9, 3, 63
26425; PWR5-NEXT:    rldimi 5, 5, 32, 0
26426; PWR5-NEXT:    and 8, 8, 5
26427; PWR5-NEXT:    and 5, 9, 5
26428; PWR5-NEXT:    ori 6, 6, 13107
26429; PWR5-NEXT:    sub 3, 3, 5
26430; PWR5-NEXT:    rldimi 6, 6, 32, 0
26431; PWR5-NEXT:    sub 4, 4, 8
26432; PWR5-NEXT:    and 8, 3, 6
26433; PWR5-NEXT:    rotldi 3, 3, 62
26434; PWR5-NEXT:    and 3, 3, 6
26435; PWR5-NEXT:    lis 7, 3855
26436; PWR5-NEXT:    and 5, 4, 6
26437; PWR5-NEXT:    rotldi 4, 4, 62
26438; PWR5-NEXT:    add 3, 8, 3
26439; PWR5-NEXT:    lis 9, 257
26440; PWR5-NEXT:    ori 7, 7, 3855
26441; PWR5-NEXT:    and 4, 4, 6
26442; PWR5-NEXT:    rldicl 6, 3, 60, 4
26443; PWR5-NEXT:    ori 9, 9, 257
26444; PWR5-NEXT:    rldimi 7, 7, 32, 0
26445; PWR5-NEXT:    add 4, 5, 4
26446; PWR5-NEXT:    add 3, 3, 6
26447; PWR5-NEXT:    rldimi 9, 9, 32, 0
26448; PWR5-NEXT:    rldicl 5, 4, 60, 4
26449; PWR5-NEXT:    and 3, 3, 7
26450; PWR5-NEXT:    add 4, 4, 5
26451; PWR5-NEXT:    mulld 3, 3, 9
26452; PWR5-NEXT:    and 4, 4, 7
26453; PWR5-NEXT:    rldicl 3, 3, 8, 56
26454; PWR5-NEXT:    li 5, 56
26455; PWR5-NEXT:    mulld 4, 4, 9
26456; PWR5-NEXT:    subc 6, 3, 5
26457; PWR5-NEXT:    rldicl 4, 4, 8, 56
26458; PWR5-NEXT:    subfe 3, 3, 3
26459; PWR5-NEXT:    subc 5, 4, 5
26460; PWR5-NEXT:    subfe 4, 4, 4
26461; PWR5-NEXT:    blr
26462;
26463; PWR6-LABEL: ult_56_v2i64:
26464; PWR6:       # %bb.0:
26465; PWR6-NEXT:    lis 5, 21845
26466; PWR6-NEXT:    lis 6, 13107
26467; PWR6-NEXT:    ori 5, 5, 21845
26468; PWR6-NEXT:    rotldi 8, 4, 63
26469; PWR6-NEXT:    rotldi 9, 3, 63
26470; PWR6-NEXT:    rldimi 5, 5, 32, 0
26471; PWR6-NEXT:    and 8, 8, 5
26472; PWR6-NEXT:    and 5, 9, 5
26473; PWR6-NEXT:    ori 6, 6, 13107
26474; PWR6-NEXT:    sub 3, 3, 5
26475; PWR6-NEXT:    rldimi 6, 6, 32, 0
26476; PWR6-NEXT:    sub 4, 4, 8
26477; PWR6-NEXT:    and 8, 3, 6
26478; PWR6-NEXT:    rotldi 3, 3, 62
26479; PWR6-NEXT:    and 3, 3, 6
26480; PWR6-NEXT:    lis 7, 3855
26481; PWR6-NEXT:    and 5, 4, 6
26482; PWR6-NEXT:    rotldi 4, 4, 62
26483; PWR6-NEXT:    add 3, 8, 3
26484; PWR6-NEXT:    lis 9, 257
26485; PWR6-NEXT:    ori 7, 7, 3855
26486; PWR6-NEXT:    and 4, 4, 6
26487; PWR6-NEXT:    rldicl 6, 3, 60, 4
26488; PWR6-NEXT:    ori 9, 9, 257
26489; PWR6-NEXT:    rldimi 7, 7, 32, 0
26490; PWR6-NEXT:    add 4, 5, 4
26491; PWR6-NEXT:    add 3, 3, 6
26492; PWR6-NEXT:    rldimi 9, 9, 32, 0
26493; PWR6-NEXT:    rldicl 5, 4, 60, 4
26494; PWR6-NEXT:    and 3, 3, 7
26495; PWR6-NEXT:    add 4, 4, 5
26496; PWR6-NEXT:    mulld 3, 3, 9
26497; PWR6-NEXT:    and 4, 4, 7
26498; PWR6-NEXT:    rldicl 3, 3, 8, 56
26499; PWR6-NEXT:    li 5, 56
26500; PWR6-NEXT:    mulld 4, 4, 9
26501; PWR6-NEXT:    subc 6, 3, 5
26502; PWR6-NEXT:    rldicl 4, 4, 8, 56
26503; PWR6-NEXT:    subfe 3, 3, 3
26504; PWR6-NEXT:    subc 5, 4, 5
26505; PWR6-NEXT:    subfe 4, 4, 4
26506; PWR6-NEXT:    blr
26507;
26508; PWR7-LABEL: ult_56_v2i64:
26509; PWR7:       # %bb.0:
26510; PWR7-NEXT:    addi 3, 1, -32
26511; PWR7-NEXT:    li 5, 0
26512; PWR7-NEXT:    li 6, -1
26513; PWR7-NEXT:    stxvd2x 34, 0, 3
26514; PWR7-NEXT:    ld 3, -24(1)
26515; PWR7-NEXT:    ld 4, -32(1)
26516; PWR7-NEXT:    popcntd 3, 3
26517; PWR7-NEXT:    popcntd 4, 4
26518; PWR7-NEXT:    cmpldi 3, 56
26519; PWR7-NEXT:    isellt 3, 6, 5
26520; PWR7-NEXT:    cmpldi 4, 56
26521; PWR7-NEXT:    isellt 4, 6, 5
26522; PWR7-NEXT:    std 3, -8(1)
26523; PWR7-NEXT:    addi 3, 1, -16
26524; PWR7-NEXT:    std 4, -16(1)
26525; PWR7-NEXT:    lxvd2x 34, 0, 3
26526; PWR7-NEXT:    blr
26527;
26528; PWR8-LABEL: ult_56_v2i64:
26529; PWR8:       # %bb.0:
26530; PWR8-NEXT:    addis 3, 2, .LCPI209_0@toc@ha
26531; PWR8-NEXT:    vpopcntd 2, 2
26532; PWR8-NEXT:    addi 3, 3, .LCPI209_0@toc@l
26533; PWR8-NEXT:    lxvd2x 35, 0, 3
26534; PWR8-NEXT:    vcmpgtud 2, 3, 2
26535; PWR8-NEXT:    blr
26536;
26537; PWR9-LABEL: ult_56_v2i64:
26538; PWR9:       # %bb.0:
26539; PWR9-NEXT:    addis 3, 2, .LCPI209_0@toc@ha
26540; PWR9-NEXT:    vpopcntd 2, 2
26541; PWR9-NEXT:    addi 3, 3, .LCPI209_0@toc@l
26542; PWR9-NEXT:    lxvx 35, 0, 3
26543; PWR9-NEXT:    vcmpgtud 2, 3, 2
26544; PWR9-NEXT:    blr
26545  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26546  %3 = icmp ult <2 x i64> %2, <i64 56, i64 56>
26547  %4 = sext <2 x i1> %3 to <2 x i64>
26548  ret <2 x i64> %4
26549}
26550
26551define <2 x i64> @ugt_56_v2i64(<2 x i64> %0) {
26552; PWR5-LABEL: ugt_56_v2i64:
26553; PWR5:       # %bb.0:
26554; PWR5-NEXT:    lis 5, 21845
26555; PWR5-NEXT:    lis 6, 13107
26556; PWR5-NEXT:    ori 5, 5, 21845
26557; PWR5-NEXT:    rotldi 8, 4, 63
26558; PWR5-NEXT:    rotldi 9, 3, 63
26559; PWR5-NEXT:    rldimi 5, 5, 32, 0
26560; PWR5-NEXT:    and 8, 8, 5
26561; PWR5-NEXT:    and 5, 9, 5
26562; PWR5-NEXT:    ori 6, 6, 13107
26563; PWR5-NEXT:    sub 3, 3, 5
26564; PWR5-NEXT:    rldimi 6, 6, 32, 0
26565; PWR5-NEXT:    sub 4, 4, 8
26566; PWR5-NEXT:    and 8, 3, 6
26567; PWR5-NEXT:    rotldi 3, 3, 62
26568; PWR5-NEXT:    and 3, 3, 6
26569; PWR5-NEXT:    lis 7, 3855
26570; PWR5-NEXT:    and 5, 4, 6
26571; PWR5-NEXT:    rotldi 4, 4, 62
26572; PWR5-NEXT:    add 3, 8, 3
26573; PWR5-NEXT:    lis 9, 257
26574; PWR5-NEXT:    ori 7, 7, 3855
26575; PWR5-NEXT:    and 4, 4, 6
26576; PWR5-NEXT:    rldicl 6, 3, 60, 4
26577; PWR5-NEXT:    ori 9, 9, 257
26578; PWR5-NEXT:    rldimi 7, 7, 32, 0
26579; PWR5-NEXT:    add 4, 5, 4
26580; PWR5-NEXT:    add 3, 3, 6
26581; PWR5-NEXT:    rldimi 9, 9, 32, 0
26582; PWR5-NEXT:    rldicl 5, 4, 60, 4
26583; PWR5-NEXT:    and 3, 3, 7
26584; PWR5-NEXT:    add 4, 4, 5
26585; PWR5-NEXT:    mulld 3, 3, 9
26586; PWR5-NEXT:    and 4, 4, 7
26587; PWR5-NEXT:    rldicl 3, 3, 8, 56
26588; PWR5-NEXT:    mulld 4, 4, 9
26589; PWR5-NEXT:    li 5, 56
26590; PWR5-NEXT:    subfic 3, 3, 56
26591; PWR5-NEXT:    rldicl 4, 4, 8, 56
26592; PWR5-NEXT:    subfe 3, 5, 5
26593; PWR5-NEXT:    subfic 4, 4, 56
26594; PWR5-NEXT:    subfe 4, 5, 5
26595; PWR5-NEXT:    blr
26596;
26597; PWR6-LABEL: ugt_56_v2i64:
26598; PWR6:       # %bb.0:
26599; PWR6-NEXT:    lis 5, 21845
26600; PWR6-NEXT:    lis 6, 13107
26601; PWR6-NEXT:    ori 5, 5, 21845
26602; PWR6-NEXT:    rotldi 8, 4, 63
26603; PWR6-NEXT:    rotldi 9, 3, 63
26604; PWR6-NEXT:    rldimi 5, 5, 32, 0
26605; PWR6-NEXT:    and 8, 8, 5
26606; PWR6-NEXT:    and 5, 9, 5
26607; PWR6-NEXT:    ori 6, 6, 13107
26608; PWR6-NEXT:    sub 3, 3, 5
26609; PWR6-NEXT:    rldimi 6, 6, 32, 0
26610; PWR6-NEXT:    sub 4, 4, 8
26611; PWR6-NEXT:    and 8, 3, 6
26612; PWR6-NEXT:    rotldi 3, 3, 62
26613; PWR6-NEXT:    and 3, 3, 6
26614; PWR6-NEXT:    lis 7, 3855
26615; PWR6-NEXT:    and 5, 4, 6
26616; PWR6-NEXT:    rotldi 4, 4, 62
26617; PWR6-NEXT:    add 3, 8, 3
26618; PWR6-NEXT:    lis 9, 257
26619; PWR6-NEXT:    ori 7, 7, 3855
26620; PWR6-NEXT:    and 4, 4, 6
26621; PWR6-NEXT:    rldicl 6, 3, 60, 4
26622; PWR6-NEXT:    ori 9, 9, 257
26623; PWR6-NEXT:    rldimi 7, 7, 32, 0
26624; PWR6-NEXT:    add 4, 5, 4
26625; PWR6-NEXT:    add 3, 3, 6
26626; PWR6-NEXT:    rldimi 9, 9, 32, 0
26627; PWR6-NEXT:    rldicl 5, 4, 60, 4
26628; PWR6-NEXT:    and 3, 3, 7
26629; PWR6-NEXT:    add 4, 4, 5
26630; PWR6-NEXT:    mulld 3, 3, 9
26631; PWR6-NEXT:    and 4, 4, 7
26632; PWR6-NEXT:    rldicl 3, 3, 8, 56
26633; PWR6-NEXT:    mulld 4, 4, 9
26634; PWR6-NEXT:    li 5, 56
26635; PWR6-NEXT:    subfic 3, 3, 56
26636; PWR6-NEXT:    rldicl 4, 4, 8, 56
26637; PWR6-NEXT:    subfe 3, 5, 5
26638; PWR6-NEXT:    subfic 4, 4, 56
26639; PWR6-NEXT:    subfe 4, 5, 5
26640; PWR6-NEXT:    blr
26641;
26642; PWR7-LABEL: ugt_56_v2i64:
26643; PWR7:       # %bb.0:
26644; PWR7-NEXT:    addi 3, 1, -32
26645; PWR7-NEXT:    li 5, 0
26646; PWR7-NEXT:    li 6, -1
26647; PWR7-NEXT:    stxvd2x 34, 0, 3
26648; PWR7-NEXT:    ld 3, -24(1)
26649; PWR7-NEXT:    ld 4, -32(1)
26650; PWR7-NEXT:    popcntd 3, 3
26651; PWR7-NEXT:    popcntd 4, 4
26652; PWR7-NEXT:    cmpldi 3, 56
26653; PWR7-NEXT:    iselgt 3, 6, 5
26654; PWR7-NEXT:    cmpldi 4, 56
26655; PWR7-NEXT:    iselgt 4, 6, 5
26656; PWR7-NEXT:    std 3, -8(1)
26657; PWR7-NEXT:    addi 3, 1, -16
26658; PWR7-NEXT:    std 4, -16(1)
26659; PWR7-NEXT:    lxvd2x 34, 0, 3
26660; PWR7-NEXT:    blr
26661;
26662; PWR8-LABEL: ugt_56_v2i64:
26663; PWR8:       # %bb.0:
26664; PWR8-NEXT:    addis 3, 2, .LCPI210_0@toc@ha
26665; PWR8-NEXT:    vpopcntd 2, 2
26666; PWR8-NEXT:    addi 3, 3, .LCPI210_0@toc@l
26667; PWR8-NEXT:    lxvd2x 35, 0, 3
26668; PWR8-NEXT:    vcmpgtud 2, 2, 3
26669; PWR8-NEXT:    blr
26670;
26671; PWR9-LABEL: ugt_56_v2i64:
26672; PWR9:       # %bb.0:
26673; PWR9-NEXT:    addis 3, 2, .LCPI210_0@toc@ha
26674; PWR9-NEXT:    vpopcntd 2, 2
26675; PWR9-NEXT:    addi 3, 3, .LCPI210_0@toc@l
26676; PWR9-NEXT:    lxvx 35, 0, 3
26677; PWR9-NEXT:    vcmpgtud 2, 2, 3
26678; PWR9-NEXT:    blr
26679  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26680  %3 = icmp ugt <2 x i64> %2, <i64 56, i64 56>
26681  %4 = sext <2 x i1> %3 to <2 x i64>
26682  ret <2 x i64> %4
26683}
26684
26685define <2 x i64> @ult_57_v2i64(<2 x i64> %0) {
26686; PWR5-LABEL: ult_57_v2i64:
26687; PWR5:       # %bb.0:
26688; PWR5-NEXT:    lis 5, 21845
26689; PWR5-NEXT:    lis 6, 13107
26690; PWR5-NEXT:    ori 5, 5, 21845
26691; PWR5-NEXT:    rotldi 8, 4, 63
26692; PWR5-NEXT:    rotldi 9, 3, 63
26693; PWR5-NEXT:    rldimi 5, 5, 32, 0
26694; PWR5-NEXT:    and 8, 8, 5
26695; PWR5-NEXT:    and 5, 9, 5
26696; PWR5-NEXT:    ori 6, 6, 13107
26697; PWR5-NEXT:    sub 3, 3, 5
26698; PWR5-NEXT:    rldimi 6, 6, 32, 0
26699; PWR5-NEXT:    sub 4, 4, 8
26700; PWR5-NEXT:    and 8, 3, 6
26701; PWR5-NEXT:    rotldi 3, 3, 62
26702; PWR5-NEXT:    and 3, 3, 6
26703; PWR5-NEXT:    lis 7, 3855
26704; PWR5-NEXT:    and 5, 4, 6
26705; PWR5-NEXT:    rotldi 4, 4, 62
26706; PWR5-NEXT:    add 3, 8, 3
26707; PWR5-NEXT:    lis 9, 257
26708; PWR5-NEXT:    ori 7, 7, 3855
26709; PWR5-NEXT:    and 4, 4, 6
26710; PWR5-NEXT:    rldicl 6, 3, 60, 4
26711; PWR5-NEXT:    ori 9, 9, 257
26712; PWR5-NEXT:    rldimi 7, 7, 32, 0
26713; PWR5-NEXT:    add 4, 5, 4
26714; PWR5-NEXT:    add 3, 3, 6
26715; PWR5-NEXT:    rldimi 9, 9, 32, 0
26716; PWR5-NEXT:    rldicl 5, 4, 60, 4
26717; PWR5-NEXT:    and 3, 3, 7
26718; PWR5-NEXT:    add 4, 4, 5
26719; PWR5-NEXT:    mulld 3, 3, 9
26720; PWR5-NEXT:    and 4, 4, 7
26721; PWR5-NEXT:    rldicl 3, 3, 8, 56
26722; PWR5-NEXT:    li 5, 57
26723; PWR5-NEXT:    mulld 4, 4, 9
26724; PWR5-NEXT:    subc 6, 3, 5
26725; PWR5-NEXT:    rldicl 4, 4, 8, 56
26726; PWR5-NEXT:    subfe 3, 3, 3
26727; PWR5-NEXT:    subc 5, 4, 5
26728; PWR5-NEXT:    subfe 4, 4, 4
26729; PWR5-NEXT:    blr
26730;
26731; PWR6-LABEL: ult_57_v2i64:
26732; PWR6:       # %bb.0:
26733; PWR6-NEXT:    lis 5, 21845
26734; PWR6-NEXT:    lis 6, 13107
26735; PWR6-NEXT:    ori 5, 5, 21845
26736; PWR6-NEXT:    rotldi 8, 4, 63
26737; PWR6-NEXT:    rotldi 9, 3, 63
26738; PWR6-NEXT:    rldimi 5, 5, 32, 0
26739; PWR6-NEXT:    and 8, 8, 5
26740; PWR6-NEXT:    and 5, 9, 5
26741; PWR6-NEXT:    ori 6, 6, 13107
26742; PWR6-NEXT:    sub 3, 3, 5
26743; PWR6-NEXT:    rldimi 6, 6, 32, 0
26744; PWR6-NEXT:    sub 4, 4, 8
26745; PWR6-NEXT:    and 8, 3, 6
26746; PWR6-NEXT:    rotldi 3, 3, 62
26747; PWR6-NEXT:    and 3, 3, 6
26748; PWR6-NEXT:    lis 7, 3855
26749; PWR6-NEXT:    and 5, 4, 6
26750; PWR6-NEXT:    rotldi 4, 4, 62
26751; PWR6-NEXT:    add 3, 8, 3
26752; PWR6-NEXT:    lis 9, 257
26753; PWR6-NEXT:    ori 7, 7, 3855
26754; PWR6-NEXT:    and 4, 4, 6
26755; PWR6-NEXT:    rldicl 6, 3, 60, 4
26756; PWR6-NEXT:    ori 9, 9, 257
26757; PWR6-NEXT:    rldimi 7, 7, 32, 0
26758; PWR6-NEXT:    add 4, 5, 4
26759; PWR6-NEXT:    add 3, 3, 6
26760; PWR6-NEXT:    rldimi 9, 9, 32, 0
26761; PWR6-NEXT:    rldicl 5, 4, 60, 4
26762; PWR6-NEXT:    and 3, 3, 7
26763; PWR6-NEXT:    add 4, 4, 5
26764; PWR6-NEXT:    mulld 3, 3, 9
26765; PWR6-NEXT:    and 4, 4, 7
26766; PWR6-NEXT:    rldicl 3, 3, 8, 56
26767; PWR6-NEXT:    li 5, 57
26768; PWR6-NEXT:    mulld 4, 4, 9
26769; PWR6-NEXT:    subc 6, 3, 5
26770; PWR6-NEXT:    rldicl 4, 4, 8, 56
26771; PWR6-NEXT:    subfe 3, 3, 3
26772; PWR6-NEXT:    subc 5, 4, 5
26773; PWR6-NEXT:    subfe 4, 4, 4
26774; PWR6-NEXT:    blr
26775;
26776; PWR7-LABEL: ult_57_v2i64:
26777; PWR7:       # %bb.0:
26778; PWR7-NEXT:    addi 3, 1, -32
26779; PWR7-NEXT:    li 5, 0
26780; PWR7-NEXT:    li 6, -1
26781; PWR7-NEXT:    stxvd2x 34, 0, 3
26782; PWR7-NEXT:    ld 3, -24(1)
26783; PWR7-NEXT:    ld 4, -32(1)
26784; PWR7-NEXT:    popcntd 3, 3
26785; PWR7-NEXT:    popcntd 4, 4
26786; PWR7-NEXT:    cmpldi 3, 57
26787; PWR7-NEXT:    isellt 3, 6, 5
26788; PWR7-NEXT:    cmpldi 4, 57
26789; PWR7-NEXT:    isellt 4, 6, 5
26790; PWR7-NEXT:    std 3, -8(1)
26791; PWR7-NEXT:    addi 3, 1, -16
26792; PWR7-NEXT:    std 4, -16(1)
26793; PWR7-NEXT:    lxvd2x 34, 0, 3
26794; PWR7-NEXT:    blr
26795;
26796; PWR8-LABEL: ult_57_v2i64:
26797; PWR8:       # %bb.0:
26798; PWR8-NEXT:    addis 3, 2, .LCPI211_0@toc@ha
26799; PWR8-NEXT:    vpopcntd 2, 2
26800; PWR8-NEXT:    addi 3, 3, .LCPI211_0@toc@l
26801; PWR8-NEXT:    lxvd2x 35, 0, 3
26802; PWR8-NEXT:    vcmpgtud 2, 3, 2
26803; PWR8-NEXT:    blr
26804;
26805; PWR9-LABEL: ult_57_v2i64:
26806; PWR9:       # %bb.0:
26807; PWR9-NEXT:    addis 3, 2, .LCPI211_0@toc@ha
26808; PWR9-NEXT:    vpopcntd 2, 2
26809; PWR9-NEXT:    addi 3, 3, .LCPI211_0@toc@l
26810; PWR9-NEXT:    lxvx 35, 0, 3
26811; PWR9-NEXT:    vcmpgtud 2, 3, 2
26812; PWR9-NEXT:    blr
26813  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26814  %3 = icmp ult <2 x i64> %2, <i64 57, i64 57>
26815  %4 = sext <2 x i1> %3 to <2 x i64>
26816  ret <2 x i64> %4
26817}
26818
26819define <2 x i64> @ugt_57_v2i64(<2 x i64> %0) {
26820; PWR5-LABEL: ugt_57_v2i64:
26821; PWR5:       # %bb.0:
26822; PWR5-NEXT:    lis 5, 21845
26823; PWR5-NEXT:    lis 6, 13107
26824; PWR5-NEXT:    ori 5, 5, 21845
26825; PWR5-NEXT:    rotldi 8, 4, 63
26826; PWR5-NEXT:    rotldi 9, 3, 63
26827; PWR5-NEXT:    rldimi 5, 5, 32, 0
26828; PWR5-NEXT:    and 8, 8, 5
26829; PWR5-NEXT:    and 5, 9, 5
26830; PWR5-NEXT:    ori 6, 6, 13107
26831; PWR5-NEXT:    sub 3, 3, 5
26832; PWR5-NEXT:    rldimi 6, 6, 32, 0
26833; PWR5-NEXT:    sub 4, 4, 8
26834; PWR5-NEXT:    and 8, 3, 6
26835; PWR5-NEXT:    rotldi 3, 3, 62
26836; PWR5-NEXT:    and 3, 3, 6
26837; PWR5-NEXT:    lis 7, 3855
26838; PWR5-NEXT:    and 5, 4, 6
26839; PWR5-NEXT:    rotldi 4, 4, 62
26840; PWR5-NEXT:    add 3, 8, 3
26841; PWR5-NEXT:    lis 9, 257
26842; PWR5-NEXT:    ori 7, 7, 3855
26843; PWR5-NEXT:    and 4, 4, 6
26844; PWR5-NEXT:    rldicl 6, 3, 60, 4
26845; PWR5-NEXT:    ori 9, 9, 257
26846; PWR5-NEXT:    rldimi 7, 7, 32, 0
26847; PWR5-NEXT:    add 4, 5, 4
26848; PWR5-NEXT:    add 3, 3, 6
26849; PWR5-NEXT:    rldimi 9, 9, 32, 0
26850; PWR5-NEXT:    rldicl 5, 4, 60, 4
26851; PWR5-NEXT:    and 3, 3, 7
26852; PWR5-NEXT:    add 4, 4, 5
26853; PWR5-NEXT:    mulld 3, 3, 9
26854; PWR5-NEXT:    and 4, 4, 7
26855; PWR5-NEXT:    rldicl 3, 3, 8, 56
26856; PWR5-NEXT:    mulld 4, 4, 9
26857; PWR5-NEXT:    li 5, 57
26858; PWR5-NEXT:    subfic 3, 3, 57
26859; PWR5-NEXT:    rldicl 4, 4, 8, 56
26860; PWR5-NEXT:    subfe 3, 5, 5
26861; PWR5-NEXT:    subfic 4, 4, 57
26862; PWR5-NEXT:    subfe 4, 5, 5
26863; PWR5-NEXT:    blr
26864;
26865; PWR6-LABEL: ugt_57_v2i64:
26866; PWR6:       # %bb.0:
26867; PWR6-NEXT:    lis 5, 21845
26868; PWR6-NEXT:    lis 6, 13107
26869; PWR6-NEXT:    ori 5, 5, 21845
26870; PWR6-NEXT:    rotldi 8, 4, 63
26871; PWR6-NEXT:    rotldi 9, 3, 63
26872; PWR6-NEXT:    rldimi 5, 5, 32, 0
26873; PWR6-NEXT:    and 8, 8, 5
26874; PWR6-NEXT:    and 5, 9, 5
26875; PWR6-NEXT:    ori 6, 6, 13107
26876; PWR6-NEXT:    sub 3, 3, 5
26877; PWR6-NEXT:    rldimi 6, 6, 32, 0
26878; PWR6-NEXT:    sub 4, 4, 8
26879; PWR6-NEXT:    and 8, 3, 6
26880; PWR6-NEXT:    rotldi 3, 3, 62
26881; PWR6-NEXT:    and 3, 3, 6
26882; PWR6-NEXT:    lis 7, 3855
26883; PWR6-NEXT:    and 5, 4, 6
26884; PWR6-NEXT:    rotldi 4, 4, 62
26885; PWR6-NEXT:    add 3, 8, 3
26886; PWR6-NEXT:    lis 9, 257
26887; PWR6-NEXT:    ori 7, 7, 3855
26888; PWR6-NEXT:    and 4, 4, 6
26889; PWR6-NEXT:    rldicl 6, 3, 60, 4
26890; PWR6-NEXT:    ori 9, 9, 257
26891; PWR6-NEXT:    rldimi 7, 7, 32, 0
26892; PWR6-NEXT:    add 4, 5, 4
26893; PWR6-NEXT:    add 3, 3, 6
26894; PWR6-NEXT:    rldimi 9, 9, 32, 0
26895; PWR6-NEXT:    rldicl 5, 4, 60, 4
26896; PWR6-NEXT:    and 3, 3, 7
26897; PWR6-NEXT:    add 4, 4, 5
26898; PWR6-NEXT:    mulld 3, 3, 9
26899; PWR6-NEXT:    and 4, 4, 7
26900; PWR6-NEXT:    rldicl 3, 3, 8, 56
26901; PWR6-NEXT:    mulld 4, 4, 9
26902; PWR6-NEXT:    li 5, 57
26903; PWR6-NEXT:    subfic 3, 3, 57
26904; PWR6-NEXT:    rldicl 4, 4, 8, 56
26905; PWR6-NEXT:    subfe 3, 5, 5
26906; PWR6-NEXT:    subfic 4, 4, 57
26907; PWR6-NEXT:    subfe 4, 5, 5
26908; PWR6-NEXT:    blr
26909;
26910; PWR7-LABEL: ugt_57_v2i64:
26911; PWR7:       # %bb.0:
26912; PWR7-NEXT:    addi 3, 1, -32
26913; PWR7-NEXT:    li 5, 0
26914; PWR7-NEXT:    li 6, -1
26915; PWR7-NEXT:    stxvd2x 34, 0, 3
26916; PWR7-NEXT:    ld 3, -24(1)
26917; PWR7-NEXT:    ld 4, -32(1)
26918; PWR7-NEXT:    popcntd 3, 3
26919; PWR7-NEXT:    popcntd 4, 4
26920; PWR7-NEXT:    cmpldi 3, 57
26921; PWR7-NEXT:    iselgt 3, 6, 5
26922; PWR7-NEXT:    cmpldi 4, 57
26923; PWR7-NEXT:    iselgt 4, 6, 5
26924; PWR7-NEXT:    std 3, -8(1)
26925; PWR7-NEXT:    addi 3, 1, -16
26926; PWR7-NEXT:    std 4, -16(1)
26927; PWR7-NEXT:    lxvd2x 34, 0, 3
26928; PWR7-NEXT:    blr
26929;
26930; PWR8-LABEL: ugt_57_v2i64:
26931; PWR8:       # %bb.0:
26932; PWR8-NEXT:    addis 3, 2, .LCPI212_0@toc@ha
26933; PWR8-NEXT:    vpopcntd 2, 2
26934; PWR8-NEXT:    addi 3, 3, .LCPI212_0@toc@l
26935; PWR8-NEXT:    lxvd2x 35, 0, 3
26936; PWR8-NEXT:    vcmpgtud 2, 2, 3
26937; PWR8-NEXT:    blr
26938;
26939; PWR9-LABEL: ugt_57_v2i64:
26940; PWR9:       # %bb.0:
26941; PWR9-NEXT:    addis 3, 2, .LCPI212_0@toc@ha
26942; PWR9-NEXT:    vpopcntd 2, 2
26943; PWR9-NEXT:    addi 3, 3, .LCPI212_0@toc@l
26944; PWR9-NEXT:    lxvx 35, 0, 3
26945; PWR9-NEXT:    vcmpgtud 2, 2, 3
26946; PWR9-NEXT:    blr
26947  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
26948  %3 = icmp ugt <2 x i64> %2, <i64 57, i64 57>
26949  %4 = sext <2 x i1> %3 to <2 x i64>
26950  ret <2 x i64> %4
26951}
26952
26953define <2 x i64> @ult_58_v2i64(<2 x i64> %0) {
26954; PWR5-LABEL: ult_58_v2i64:
26955; PWR5:       # %bb.0:
26956; PWR5-NEXT:    lis 5, 21845
26957; PWR5-NEXT:    lis 6, 13107
26958; PWR5-NEXT:    ori 5, 5, 21845
26959; PWR5-NEXT:    rotldi 8, 4, 63
26960; PWR5-NEXT:    rotldi 9, 3, 63
26961; PWR5-NEXT:    rldimi 5, 5, 32, 0
26962; PWR5-NEXT:    and 8, 8, 5
26963; PWR5-NEXT:    and 5, 9, 5
26964; PWR5-NEXT:    ori 6, 6, 13107
26965; PWR5-NEXT:    sub 3, 3, 5
26966; PWR5-NEXT:    rldimi 6, 6, 32, 0
26967; PWR5-NEXT:    sub 4, 4, 8
26968; PWR5-NEXT:    and 8, 3, 6
26969; PWR5-NEXT:    rotldi 3, 3, 62
26970; PWR5-NEXT:    and 3, 3, 6
26971; PWR5-NEXT:    lis 7, 3855
26972; PWR5-NEXT:    and 5, 4, 6
26973; PWR5-NEXT:    rotldi 4, 4, 62
26974; PWR5-NEXT:    add 3, 8, 3
26975; PWR5-NEXT:    lis 9, 257
26976; PWR5-NEXT:    ori 7, 7, 3855
26977; PWR5-NEXT:    and 4, 4, 6
26978; PWR5-NEXT:    rldicl 6, 3, 60, 4
26979; PWR5-NEXT:    ori 9, 9, 257
26980; PWR5-NEXT:    rldimi 7, 7, 32, 0
26981; PWR5-NEXT:    add 4, 5, 4
26982; PWR5-NEXT:    add 3, 3, 6
26983; PWR5-NEXT:    rldimi 9, 9, 32, 0
26984; PWR5-NEXT:    rldicl 5, 4, 60, 4
26985; PWR5-NEXT:    and 3, 3, 7
26986; PWR5-NEXT:    add 4, 4, 5
26987; PWR5-NEXT:    mulld 3, 3, 9
26988; PWR5-NEXT:    and 4, 4, 7
26989; PWR5-NEXT:    rldicl 3, 3, 8, 56
26990; PWR5-NEXT:    li 5, 58
26991; PWR5-NEXT:    mulld 4, 4, 9
26992; PWR5-NEXT:    subc 6, 3, 5
26993; PWR5-NEXT:    rldicl 4, 4, 8, 56
26994; PWR5-NEXT:    subfe 3, 3, 3
26995; PWR5-NEXT:    subc 5, 4, 5
26996; PWR5-NEXT:    subfe 4, 4, 4
26997; PWR5-NEXT:    blr
26998;
26999; PWR6-LABEL: ult_58_v2i64:
27000; PWR6:       # %bb.0:
27001; PWR6-NEXT:    lis 5, 21845
27002; PWR6-NEXT:    lis 6, 13107
27003; PWR6-NEXT:    ori 5, 5, 21845
27004; PWR6-NEXT:    rotldi 8, 4, 63
27005; PWR6-NEXT:    rotldi 9, 3, 63
27006; PWR6-NEXT:    rldimi 5, 5, 32, 0
27007; PWR6-NEXT:    and 8, 8, 5
27008; PWR6-NEXT:    and 5, 9, 5
27009; PWR6-NEXT:    ori 6, 6, 13107
27010; PWR6-NEXT:    sub 3, 3, 5
27011; PWR6-NEXT:    rldimi 6, 6, 32, 0
27012; PWR6-NEXT:    sub 4, 4, 8
27013; PWR6-NEXT:    and 8, 3, 6
27014; PWR6-NEXT:    rotldi 3, 3, 62
27015; PWR6-NEXT:    and 3, 3, 6
27016; PWR6-NEXT:    lis 7, 3855
27017; PWR6-NEXT:    and 5, 4, 6
27018; PWR6-NEXT:    rotldi 4, 4, 62
27019; PWR6-NEXT:    add 3, 8, 3
27020; PWR6-NEXT:    lis 9, 257
27021; PWR6-NEXT:    ori 7, 7, 3855
27022; PWR6-NEXT:    and 4, 4, 6
27023; PWR6-NEXT:    rldicl 6, 3, 60, 4
27024; PWR6-NEXT:    ori 9, 9, 257
27025; PWR6-NEXT:    rldimi 7, 7, 32, 0
27026; PWR6-NEXT:    add 4, 5, 4
27027; PWR6-NEXT:    add 3, 3, 6
27028; PWR6-NEXT:    rldimi 9, 9, 32, 0
27029; PWR6-NEXT:    rldicl 5, 4, 60, 4
27030; PWR6-NEXT:    and 3, 3, 7
27031; PWR6-NEXT:    add 4, 4, 5
27032; PWR6-NEXT:    mulld 3, 3, 9
27033; PWR6-NEXT:    and 4, 4, 7
27034; PWR6-NEXT:    rldicl 3, 3, 8, 56
27035; PWR6-NEXT:    li 5, 58
27036; PWR6-NEXT:    mulld 4, 4, 9
27037; PWR6-NEXT:    subc 6, 3, 5
27038; PWR6-NEXT:    rldicl 4, 4, 8, 56
27039; PWR6-NEXT:    subfe 3, 3, 3
27040; PWR6-NEXT:    subc 5, 4, 5
27041; PWR6-NEXT:    subfe 4, 4, 4
27042; PWR6-NEXT:    blr
27043;
27044; PWR7-LABEL: ult_58_v2i64:
27045; PWR7:       # %bb.0:
27046; PWR7-NEXT:    addi 3, 1, -32
27047; PWR7-NEXT:    li 5, 0
27048; PWR7-NEXT:    li 6, -1
27049; PWR7-NEXT:    stxvd2x 34, 0, 3
27050; PWR7-NEXT:    ld 3, -24(1)
27051; PWR7-NEXT:    ld 4, -32(1)
27052; PWR7-NEXT:    popcntd 3, 3
27053; PWR7-NEXT:    popcntd 4, 4
27054; PWR7-NEXT:    cmpldi 3, 58
27055; PWR7-NEXT:    isellt 3, 6, 5
27056; PWR7-NEXT:    cmpldi 4, 58
27057; PWR7-NEXT:    isellt 4, 6, 5
27058; PWR7-NEXT:    std 3, -8(1)
27059; PWR7-NEXT:    addi 3, 1, -16
27060; PWR7-NEXT:    std 4, -16(1)
27061; PWR7-NEXT:    lxvd2x 34, 0, 3
27062; PWR7-NEXT:    blr
27063;
27064; PWR8-LABEL: ult_58_v2i64:
27065; PWR8:       # %bb.0:
27066; PWR8-NEXT:    addis 3, 2, .LCPI213_0@toc@ha
27067; PWR8-NEXT:    vpopcntd 2, 2
27068; PWR8-NEXT:    addi 3, 3, .LCPI213_0@toc@l
27069; PWR8-NEXT:    lxvd2x 35, 0, 3
27070; PWR8-NEXT:    vcmpgtud 2, 3, 2
27071; PWR8-NEXT:    blr
27072;
27073; PWR9-LABEL: ult_58_v2i64:
27074; PWR9:       # %bb.0:
27075; PWR9-NEXT:    addis 3, 2, .LCPI213_0@toc@ha
27076; PWR9-NEXT:    vpopcntd 2, 2
27077; PWR9-NEXT:    addi 3, 3, .LCPI213_0@toc@l
27078; PWR9-NEXT:    lxvx 35, 0, 3
27079; PWR9-NEXT:    vcmpgtud 2, 3, 2
27080; PWR9-NEXT:    blr
27081  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27082  %3 = icmp ult <2 x i64> %2, <i64 58, i64 58>
27083  %4 = sext <2 x i1> %3 to <2 x i64>
27084  ret <2 x i64> %4
27085}
27086
27087define <2 x i64> @ugt_58_v2i64(<2 x i64> %0) {
27088; PWR5-LABEL: ugt_58_v2i64:
27089; PWR5:       # %bb.0:
27090; PWR5-NEXT:    lis 5, 21845
27091; PWR5-NEXT:    lis 6, 13107
27092; PWR5-NEXT:    ori 5, 5, 21845
27093; PWR5-NEXT:    rotldi 8, 4, 63
27094; PWR5-NEXT:    rotldi 9, 3, 63
27095; PWR5-NEXT:    rldimi 5, 5, 32, 0
27096; PWR5-NEXT:    and 8, 8, 5
27097; PWR5-NEXT:    and 5, 9, 5
27098; PWR5-NEXT:    ori 6, 6, 13107
27099; PWR5-NEXT:    sub 3, 3, 5
27100; PWR5-NEXT:    rldimi 6, 6, 32, 0
27101; PWR5-NEXT:    sub 4, 4, 8
27102; PWR5-NEXT:    and 8, 3, 6
27103; PWR5-NEXT:    rotldi 3, 3, 62
27104; PWR5-NEXT:    and 3, 3, 6
27105; PWR5-NEXT:    lis 7, 3855
27106; PWR5-NEXT:    and 5, 4, 6
27107; PWR5-NEXT:    rotldi 4, 4, 62
27108; PWR5-NEXT:    add 3, 8, 3
27109; PWR5-NEXT:    lis 9, 257
27110; PWR5-NEXT:    ori 7, 7, 3855
27111; PWR5-NEXT:    and 4, 4, 6
27112; PWR5-NEXT:    rldicl 6, 3, 60, 4
27113; PWR5-NEXT:    ori 9, 9, 257
27114; PWR5-NEXT:    rldimi 7, 7, 32, 0
27115; PWR5-NEXT:    add 4, 5, 4
27116; PWR5-NEXT:    add 3, 3, 6
27117; PWR5-NEXT:    rldimi 9, 9, 32, 0
27118; PWR5-NEXT:    rldicl 5, 4, 60, 4
27119; PWR5-NEXT:    and 3, 3, 7
27120; PWR5-NEXT:    add 4, 4, 5
27121; PWR5-NEXT:    mulld 3, 3, 9
27122; PWR5-NEXT:    and 4, 4, 7
27123; PWR5-NEXT:    rldicl 3, 3, 8, 56
27124; PWR5-NEXT:    mulld 4, 4, 9
27125; PWR5-NEXT:    li 5, 58
27126; PWR5-NEXT:    subfic 3, 3, 58
27127; PWR5-NEXT:    rldicl 4, 4, 8, 56
27128; PWR5-NEXT:    subfe 3, 5, 5
27129; PWR5-NEXT:    subfic 4, 4, 58
27130; PWR5-NEXT:    subfe 4, 5, 5
27131; PWR5-NEXT:    blr
27132;
27133; PWR6-LABEL: ugt_58_v2i64:
27134; PWR6:       # %bb.0:
27135; PWR6-NEXT:    lis 5, 21845
27136; PWR6-NEXT:    lis 6, 13107
27137; PWR6-NEXT:    ori 5, 5, 21845
27138; PWR6-NEXT:    rotldi 8, 4, 63
27139; PWR6-NEXT:    rotldi 9, 3, 63
27140; PWR6-NEXT:    rldimi 5, 5, 32, 0
27141; PWR6-NEXT:    and 8, 8, 5
27142; PWR6-NEXT:    and 5, 9, 5
27143; PWR6-NEXT:    ori 6, 6, 13107
27144; PWR6-NEXT:    sub 3, 3, 5
27145; PWR6-NEXT:    rldimi 6, 6, 32, 0
27146; PWR6-NEXT:    sub 4, 4, 8
27147; PWR6-NEXT:    and 8, 3, 6
27148; PWR6-NEXT:    rotldi 3, 3, 62
27149; PWR6-NEXT:    and 3, 3, 6
27150; PWR6-NEXT:    lis 7, 3855
27151; PWR6-NEXT:    and 5, 4, 6
27152; PWR6-NEXT:    rotldi 4, 4, 62
27153; PWR6-NEXT:    add 3, 8, 3
27154; PWR6-NEXT:    lis 9, 257
27155; PWR6-NEXT:    ori 7, 7, 3855
27156; PWR6-NEXT:    and 4, 4, 6
27157; PWR6-NEXT:    rldicl 6, 3, 60, 4
27158; PWR6-NEXT:    ori 9, 9, 257
27159; PWR6-NEXT:    rldimi 7, 7, 32, 0
27160; PWR6-NEXT:    add 4, 5, 4
27161; PWR6-NEXT:    add 3, 3, 6
27162; PWR6-NEXT:    rldimi 9, 9, 32, 0
27163; PWR6-NEXT:    rldicl 5, 4, 60, 4
27164; PWR6-NEXT:    and 3, 3, 7
27165; PWR6-NEXT:    add 4, 4, 5
27166; PWR6-NEXT:    mulld 3, 3, 9
27167; PWR6-NEXT:    and 4, 4, 7
27168; PWR6-NEXT:    rldicl 3, 3, 8, 56
27169; PWR6-NEXT:    mulld 4, 4, 9
27170; PWR6-NEXT:    li 5, 58
27171; PWR6-NEXT:    subfic 3, 3, 58
27172; PWR6-NEXT:    rldicl 4, 4, 8, 56
27173; PWR6-NEXT:    subfe 3, 5, 5
27174; PWR6-NEXT:    subfic 4, 4, 58
27175; PWR6-NEXT:    subfe 4, 5, 5
27176; PWR6-NEXT:    blr
27177;
27178; PWR7-LABEL: ugt_58_v2i64:
27179; PWR7:       # %bb.0:
27180; PWR7-NEXT:    addi 3, 1, -32
27181; PWR7-NEXT:    li 5, 0
27182; PWR7-NEXT:    li 6, -1
27183; PWR7-NEXT:    stxvd2x 34, 0, 3
27184; PWR7-NEXT:    ld 3, -24(1)
27185; PWR7-NEXT:    ld 4, -32(1)
27186; PWR7-NEXT:    popcntd 3, 3
27187; PWR7-NEXT:    popcntd 4, 4
27188; PWR7-NEXT:    cmpldi 3, 58
27189; PWR7-NEXT:    iselgt 3, 6, 5
27190; PWR7-NEXT:    cmpldi 4, 58
27191; PWR7-NEXT:    iselgt 4, 6, 5
27192; PWR7-NEXT:    std 3, -8(1)
27193; PWR7-NEXT:    addi 3, 1, -16
27194; PWR7-NEXT:    std 4, -16(1)
27195; PWR7-NEXT:    lxvd2x 34, 0, 3
27196; PWR7-NEXT:    blr
27197;
27198; PWR8-LABEL: ugt_58_v2i64:
27199; PWR8:       # %bb.0:
27200; PWR8-NEXT:    addis 3, 2, .LCPI214_0@toc@ha
27201; PWR8-NEXT:    vpopcntd 2, 2
27202; PWR8-NEXT:    addi 3, 3, .LCPI214_0@toc@l
27203; PWR8-NEXT:    lxvd2x 35, 0, 3
27204; PWR8-NEXT:    vcmpgtud 2, 2, 3
27205; PWR8-NEXT:    blr
27206;
27207; PWR9-LABEL: ugt_58_v2i64:
27208; PWR9:       # %bb.0:
27209; PWR9-NEXT:    addis 3, 2, .LCPI214_0@toc@ha
27210; PWR9-NEXT:    vpopcntd 2, 2
27211; PWR9-NEXT:    addi 3, 3, .LCPI214_0@toc@l
27212; PWR9-NEXT:    lxvx 35, 0, 3
27213; PWR9-NEXT:    vcmpgtud 2, 2, 3
27214; PWR9-NEXT:    blr
27215  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27216  %3 = icmp ugt <2 x i64> %2, <i64 58, i64 58>
27217  %4 = sext <2 x i1> %3 to <2 x i64>
27218  ret <2 x i64> %4
27219}
27220
27221define <2 x i64> @ult_59_v2i64(<2 x i64> %0) {
27222; PWR5-LABEL: ult_59_v2i64:
27223; PWR5:       # %bb.0:
27224; PWR5-NEXT:    lis 5, 21845
27225; PWR5-NEXT:    lis 6, 13107
27226; PWR5-NEXT:    ori 5, 5, 21845
27227; PWR5-NEXT:    rotldi 8, 4, 63
27228; PWR5-NEXT:    rotldi 9, 3, 63
27229; PWR5-NEXT:    rldimi 5, 5, 32, 0
27230; PWR5-NEXT:    and 8, 8, 5
27231; PWR5-NEXT:    and 5, 9, 5
27232; PWR5-NEXT:    ori 6, 6, 13107
27233; PWR5-NEXT:    sub 3, 3, 5
27234; PWR5-NEXT:    rldimi 6, 6, 32, 0
27235; PWR5-NEXT:    sub 4, 4, 8
27236; PWR5-NEXT:    and 8, 3, 6
27237; PWR5-NEXT:    rotldi 3, 3, 62
27238; PWR5-NEXT:    and 3, 3, 6
27239; PWR5-NEXT:    lis 7, 3855
27240; PWR5-NEXT:    and 5, 4, 6
27241; PWR5-NEXT:    rotldi 4, 4, 62
27242; PWR5-NEXT:    add 3, 8, 3
27243; PWR5-NEXT:    lis 9, 257
27244; PWR5-NEXT:    ori 7, 7, 3855
27245; PWR5-NEXT:    and 4, 4, 6
27246; PWR5-NEXT:    rldicl 6, 3, 60, 4
27247; PWR5-NEXT:    ori 9, 9, 257
27248; PWR5-NEXT:    rldimi 7, 7, 32, 0
27249; PWR5-NEXT:    add 4, 5, 4
27250; PWR5-NEXT:    add 3, 3, 6
27251; PWR5-NEXT:    rldimi 9, 9, 32, 0
27252; PWR5-NEXT:    rldicl 5, 4, 60, 4
27253; PWR5-NEXT:    and 3, 3, 7
27254; PWR5-NEXT:    add 4, 4, 5
27255; PWR5-NEXT:    mulld 3, 3, 9
27256; PWR5-NEXT:    and 4, 4, 7
27257; PWR5-NEXT:    rldicl 3, 3, 8, 56
27258; PWR5-NEXT:    li 5, 59
27259; PWR5-NEXT:    mulld 4, 4, 9
27260; PWR5-NEXT:    subc 6, 3, 5
27261; PWR5-NEXT:    rldicl 4, 4, 8, 56
27262; PWR5-NEXT:    subfe 3, 3, 3
27263; PWR5-NEXT:    subc 5, 4, 5
27264; PWR5-NEXT:    subfe 4, 4, 4
27265; PWR5-NEXT:    blr
27266;
27267; PWR6-LABEL: ult_59_v2i64:
27268; PWR6:       # %bb.0:
27269; PWR6-NEXT:    lis 5, 21845
27270; PWR6-NEXT:    lis 6, 13107
27271; PWR6-NEXT:    ori 5, 5, 21845
27272; PWR6-NEXT:    rotldi 8, 4, 63
27273; PWR6-NEXT:    rotldi 9, 3, 63
27274; PWR6-NEXT:    rldimi 5, 5, 32, 0
27275; PWR6-NEXT:    and 8, 8, 5
27276; PWR6-NEXT:    and 5, 9, 5
27277; PWR6-NEXT:    ori 6, 6, 13107
27278; PWR6-NEXT:    sub 3, 3, 5
27279; PWR6-NEXT:    rldimi 6, 6, 32, 0
27280; PWR6-NEXT:    sub 4, 4, 8
27281; PWR6-NEXT:    and 8, 3, 6
27282; PWR6-NEXT:    rotldi 3, 3, 62
27283; PWR6-NEXT:    and 3, 3, 6
27284; PWR6-NEXT:    lis 7, 3855
27285; PWR6-NEXT:    and 5, 4, 6
27286; PWR6-NEXT:    rotldi 4, 4, 62
27287; PWR6-NEXT:    add 3, 8, 3
27288; PWR6-NEXT:    lis 9, 257
27289; PWR6-NEXT:    ori 7, 7, 3855
27290; PWR6-NEXT:    and 4, 4, 6
27291; PWR6-NEXT:    rldicl 6, 3, 60, 4
27292; PWR6-NEXT:    ori 9, 9, 257
27293; PWR6-NEXT:    rldimi 7, 7, 32, 0
27294; PWR6-NEXT:    add 4, 5, 4
27295; PWR6-NEXT:    add 3, 3, 6
27296; PWR6-NEXT:    rldimi 9, 9, 32, 0
27297; PWR6-NEXT:    rldicl 5, 4, 60, 4
27298; PWR6-NEXT:    and 3, 3, 7
27299; PWR6-NEXT:    add 4, 4, 5
27300; PWR6-NEXT:    mulld 3, 3, 9
27301; PWR6-NEXT:    and 4, 4, 7
27302; PWR6-NEXT:    rldicl 3, 3, 8, 56
27303; PWR6-NEXT:    li 5, 59
27304; PWR6-NEXT:    mulld 4, 4, 9
27305; PWR6-NEXT:    subc 6, 3, 5
27306; PWR6-NEXT:    rldicl 4, 4, 8, 56
27307; PWR6-NEXT:    subfe 3, 3, 3
27308; PWR6-NEXT:    subc 5, 4, 5
27309; PWR6-NEXT:    subfe 4, 4, 4
27310; PWR6-NEXT:    blr
27311;
27312; PWR7-LABEL: ult_59_v2i64:
27313; PWR7:       # %bb.0:
27314; PWR7-NEXT:    addi 3, 1, -32
27315; PWR7-NEXT:    li 5, 0
27316; PWR7-NEXT:    li 6, -1
27317; PWR7-NEXT:    stxvd2x 34, 0, 3
27318; PWR7-NEXT:    ld 3, -24(1)
27319; PWR7-NEXT:    ld 4, -32(1)
27320; PWR7-NEXT:    popcntd 3, 3
27321; PWR7-NEXT:    popcntd 4, 4
27322; PWR7-NEXT:    cmpldi 3, 59
27323; PWR7-NEXT:    isellt 3, 6, 5
27324; PWR7-NEXT:    cmpldi 4, 59
27325; PWR7-NEXT:    isellt 4, 6, 5
27326; PWR7-NEXT:    std 3, -8(1)
27327; PWR7-NEXT:    addi 3, 1, -16
27328; PWR7-NEXT:    std 4, -16(1)
27329; PWR7-NEXT:    lxvd2x 34, 0, 3
27330; PWR7-NEXT:    blr
27331;
27332; PWR8-LABEL: ult_59_v2i64:
27333; PWR8:       # %bb.0:
27334; PWR8-NEXT:    addis 3, 2, .LCPI215_0@toc@ha
27335; PWR8-NEXT:    vpopcntd 2, 2
27336; PWR8-NEXT:    addi 3, 3, .LCPI215_0@toc@l
27337; PWR8-NEXT:    lxvd2x 35, 0, 3
27338; PWR8-NEXT:    vcmpgtud 2, 3, 2
27339; PWR8-NEXT:    blr
27340;
27341; PWR9-LABEL: ult_59_v2i64:
27342; PWR9:       # %bb.0:
27343; PWR9-NEXT:    addis 3, 2, .LCPI215_0@toc@ha
27344; PWR9-NEXT:    vpopcntd 2, 2
27345; PWR9-NEXT:    addi 3, 3, .LCPI215_0@toc@l
27346; PWR9-NEXT:    lxvx 35, 0, 3
27347; PWR9-NEXT:    vcmpgtud 2, 3, 2
27348; PWR9-NEXT:    blr
27349  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27350  %3 = icmp ult <2 x i64> %2, <i64 59, i64 59>
27351  %4 = sext <2 x i1> %3 to <2 x i64>
27352  ret <2 x i64> %4
27353}
27354
27355define <2 x i64> @ugt_59_v2i64(<2 x i64> %0) {
27356; PWR5-LABEL: ugt_59_v2i64:
27357; PWR5:       # %bb.0:
27358; PWR5-NEXT:    lis 5, 21845
27359; PWR5-NEXT:    lis 6, 13107
27360; PWR5-NEXT:    ori 5, 5, 21845
27361; PWR5-NEXT:    rotldi 8, 4, 63
27362; PWR5-NEXT:    rotldi 9, 3, 63
27363; PWR5-NEXT:    rldimi 5, 5, 32, 0
27364; PWR5-NEXT:    and 8, 8, 5
27365; PWR5-NEXT:    and 5, 9, 5
27366; PWR5-NEXT:    ori 6, 6, 13107
27367; PWR5-NEXT:    sub 3, 3, 5
27368; PWR5-NEXT:    rldimi 6, 6, 32, 0
27369; PWR5-NEXT:    sub 4, 4, 8
27370; PWR5-NEXT:    and 8, 3, 6
27371; PWR5-NEXT:    rotldi 3, 3, 62
27372; PWR5-NEXT:    and 3, 3, 6
27373; PWR5-NEXT:    lis 7, 3855
27374; PWR5-NEXT:    and 5, 4, 6
27375; PWR5-NEXT:    rotldi 4, 4, 62
27376; PWR5-NEXT:    add 3, 8, 3
27377; PWR5-NEXT:    lis 9, 257
27378; PWR5-NEXT:    ori 7, 7, 3855
27379; PWR5-NEXT:    and 4, 4, 6
27380; PWR5-NEXT:    rldicl 6, 3, 60, 4
27381; PWR5-NEXT:    ori 9, 9, 257
27382; PWR5-NEXT:    rldimi 7, 7, 32, 0
27383; PWR5-NEXT:    add 4, 5, 4
27384; PWR5-NEXT:    add 3, 3, 6
27385; PWR5-NEXT:    rldimi 9, 9, 32, 0
27386; PWR5-NEXT:    rldicl 5, 4, 60, 4
27387; PWR5-NEXT:    and 3, 3, 7
27388; PWR5-NEXT:    add 4, 4, 5
27389; PWR5-NEXT:    mulld 3, 3, 9
27390; PWR5-NEXT:    and 4, 4, 7
27391; PWR5-NEXT:    rldicl 3, 3, 8, 56
27392; PWR5-NEXT:    mulld 4, 4, 9
27393; PWR5-NEXT:    li 5, 59
27394; PWR5-NEXT:    subfic 3, 3, 59
27395; PWR5-NEXT:    rldicl 4, 4, 8, 56
27396; PWR5-NEXT:    subfe 3, 5, 5
27397; PWR5-NEXT:    subfic 4, 4, 59
27398; PWR5-NEXT:    subfe 4, 5, 5
27399; PWR5-NEXT:    blr
27400;
27401; PWR6-LABEL: ugt_59_v2i64:
27402; PWR6:       # %bb.0:
27403; PWR6-NEXT:    lis 5, 21845
27404; PWR6-NEXT:    lis 6, 13107
27405; PWR6-NEXT:    ori 5, 5, 21845
27406; PWR6-NEXT:    rotldi 8, 4, 63
27407; PWR6-NEXT:    rotldi 9, 3, 63
27408; PWR6-NEXT:    rldimi 5, 5, 32, 0
27409; PWR6-NEXT:    and 8, 8, 5
27410; PWR6-NEXT:    and 5, 9, 5
27411; PWR6-NEXT:    ori 6, 6, 13107
27412; PWR6-NEXT:    sub 3, 3, 5
27413; PWR6-NEXT:    rldimi 6, 6, 32, 0
27414; PWR6-NEXT:    sub 4, 4, 8
27415; PWR6-NEXT:    and 8, 3, 6
27416; PWR6-NEXT:    rotldi 3, 3, 62
27417; PWR6-NEXT:    and 3, 3, 6
27418; PWR6-NEXT:    lis 7, 3855
27419; PWR6-NEXT:    and 5, 4, 6
27420; PWR6-NEXT:    rotldi 4, 4, 62
27421; PWR6-NEXT:    add 3, 8, 3
27422; PWR6-NEXT:    lis 9, 257
27423; PWR6-NEXT:    ori 7, 7, 3855
27424; PWR6-NEXT:    and 4, 4, 6
27425; PWR6-NEXT:    rldicl 6, 3, 60, 4
27426; PWR6-NEXT:    ori 9, 9, 257
27427; PWR6-NEXT:    rldimi 7, 7, 32, 0
27428; PWR6-NEXT:    add 4, 5, 4
27429; PWR6-NEXT:    add 3, 3, 6
27430; PWR6-NEXT:    rldimi 9, 9, 32, 0
27431; PWR6-NEXT:    rldicl 5, 4, 60, 4
27432; PWR6-NEXT:    and 3, 3, 7
27433; PWR6-NEXT:    add 4, 4, 5
27434; PWR6-NEXT:    mulld 3, 3, 9
27435; PWR6-NEXT:    and 4, 4, 7
27436; PWR6-NEXT:    rldicl 3, 3, 8, 56
27437; PWR6-NEXT:    mulld 4, 4, 9
27438; PWR6-NEXT:    li 5, 59
27439; PWR6-NEXT:    subfic 3, 3, 59
27440; PWR6-NEXT:    rldicl 4, 4, 8, 56
27441; PWR6-NEXT:    subfe 3, 5, 5
27442; PWR6-NEXT:    subfic 4, 4, 59
27443; PWR6-NEXT:    subfe 4, 5, 5
27444; PWR6-NEXT:    blr
27445;
27446; PWR7-LABEL: ugt_59_v2i64:
27447; PWR7:       # %bb.0:
27448; PWR7-NEXT:    addi 3, 1, -32
27449; PWR7-NEXT:    li 5, 0
27450; PWR7-NEXT:    li 6, -1
27451; PWR7-NEXT:    stxvd2x 34, 0, 3
27452; PWR7-NEXT:    ld 3, -24(1)
27453; PWR7-NEXT:    ld 4, -32(1)
27454; PWR7-NEXT:    popcntd 3, 3
27455; PWR7-NEXT:    popcntd 4, 4
27456; PWR7-NEXT:    cmpldi 3, 59
27457; PWR7-NEXT:    iselgt 3, 6, 5
27458; PWR7-NEXT:    cmpldi 4, 59
27459; PWR7-NEXT:    iselgt 4, 6, 5
27460; PWR7-NEXT:    std 3, -8(1)
27461; PWR7-NEXT:    addi 3, 1, -16
27462; PWR7-NEXT:    std 4, -16(1)
27463; PWR7-NEXT:    lxvd2x 34, 0, 3
27464; PWR7-NEXT:    blr
27465;
27466; PWR8-LABEL: ugt_59_v2i64:
27467; PWR8:       # %bb.0:
27468; PWR8-NEXT:    addis 3, 2, .LCPI216_0@toc@ha
27469; PWR8-NEXT:    vpopcntd 2, 2
27470; PWR8-NEXT:    addi 3, 3, .LCPI216_0@toc@l
27471; PWR8-NEXT:    lxvd2x 35, 0, 3
27472; PWR8-NEXT:    vcmpgtud 2, 2, 3
27473; PWR8-NEXT:    blr
27474;
27475; PWR9-LABEL: ugt_59_v2i64:
27476; PWR9:       # %bb.0:
27477; PWR9-NEXT:    addis 3, 2, .LCPI216_0@toc@ha
27478; PWR9-NEXT:    vpopcntd 2, 2
27479; PWR9-NEXT:    addi 3, 3, .LCPI216_0@toc@l
27480; PWR9-NEXT:    lxvx 35, 0, 3
27481; PWR9-NEXT:    vcmpgtud 2, 2, 3
27482; PWR9-NEXT:    blr
27483  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27484  %3 = icmp ugt <2 x i64> %2, <i64 59, i64 59>
27485  %4 = sext <2 x i1> %3 to <2 x i64>
27486  ret <2 x i64> %4
27487}
27488
27489define <2 x i64> @ult_60_v2i64(<2 x i64> %0) {
27490; PWR5-LABEL: ult_60_v2i64:
27491; PWR5:       # %bb.0:
27492; PWR5-NEXT:    lis 5, 21845
27493; PWR5-NEXT:    lis 6, 13107
27494; PWR5-NEXT:    ori 5, 5, 21845
27495; PWR5-NEXT:    rotldi 8, 4, 63
27496; PWR5-NEXT:    rotldi 9, 3, 63
27497; PWR5-NEXT:    rldimi 5, 5, 32, 0
27498; PWR5-NEXT:    and 8, 8, 5
27499; PWR5-NEXT:    and 5, 9, 5
27500; PWR5-NEXT:    ori 6, 6, 13107
27501; PWR5-NEXT:    sub 3, 3, 5
27502; PWR5-NEXT:    rldimi 6, 6, 32, 0
27503; PWR5-NEXT:    sub 4, 4, 8
27504; PWR5-NEXT:    and 8, 3, 6
27505; PWR5-NEXT:    rotldi 3, 3, 62
27506; PWR5-NEXT:    and 3, 3, 6
27507; PWR5-NEXT:    lis 7, 3855
27508; PWR5-NEXT:    and 5, 4, 6
27509; PWR5-NEXT:    rotldi 4, 4, 62
27510; PWR5-NEXT:    add 3, 8, 3
27511; PWR5-NEXT:    lis 9, 257
27512; PWR5-NEXT:    ori 7, 7, 3855
27513; PWR5-NEXT:    and 4, 4, 6
27514; PWR5-NEXT:    rldicl 6, 3, 60, 4
27515; PWR5-NEXT:    ori 9, 9, 257
27516; PWR5-NEXT:    rldimi 7, 7, 32, 0
27517; PWR5-NEXT:    add 4, 5, 4
27518; PWR5-NEXT:    add 3, 3, 6
27519; PWR5-NEXT:    rldimi 9, 9, 32, 0
27520; PWR5-NEXT:    rldicl 5, 4, 60, 4
27521; PWR5-NEXT:    and 3, 3, 7
27522; PWR5-NEXT:    add 4, 4, 5
27523; PWR5-NEXT:    mulld 3, 3, 9
27524; PWR5-NEXT:    and 4, 4, 7
27525; PWR5-NEXT:    rldicl 3, 3, 8, 56
27526; PWR5-NEXT:    li 5, 60
27527; PWR5-NEXT:    mulld 4, 4, 9
27528; PWR5-NEXT:    subc 6, 3, 5
27529; PWR5-NEXT:    rldicl 4, 4, 8, 56
27530; PWR5-NEXT:    subfe 3, 3, 3
27531; PWR5-NEXT:    subc 5, 4, 5
27532; PWR5-NEXT:    subfe 4, 4, 4
27533; PWR5-NEXT:    blr
27534;
27535; PWR6-LABEL: ult_60_v2i64:
27536; PWR6:       # %bb.0:
27537; PWR6-NEXT:    lis 5, 21845
27538; PWR6-NEXT:    lis 6, 13107
27539; PWR6-NEXT:    ori 5, 5, 21845
27540; PWR6-NEXT:    rotldi 8, 4, 63
27541; PWR6-NEXT:    rotldi 9, 3, 63
27542; PWR6-NEXT:    rldimi 5, 5, 32, 0
27543; PWR6-NEXT:    and 8, 8, 5
27544; PWR6-NEXT:    and 5, 9, 5
27545; PWR6-NEXT:    ori 6, 6, 13107
27546; PWR6-NEXT:    sub 3, 3, 5
27547; PWR6-NEXT:    rldimi 6, 6, 32, 0
27548; PWR6-NEXT:    sub 4, 4, 8
27549; PWR6-NEXT:    and 8, 3, 6
27550; PWR6-NEXT:    rotldi 3, 3, 62
27551; PWR6-NEXT:    and 3, 3, 6
27552; PWR6-NEXT:    lis 7, 3855
27553; PWR6-NEXT:    and 5, 4, 6
27554; PWR6-NEXT:    rotldi 4, 4, 62
27555; PWR6-NEXT:    add 3, 8, 3
27556; PWR6-NEXT:    lis 9, 257
27557; PWR6-NEXT:    ori 7, 7, 3855
27558; PWR6-NEXT:    and 4, 4, 6
27559; PWR6-NEXT:    rldicl 6, 3, 60, 4
27560; PWR6-NEXT:    ori 9, 9, 257
27561; PWR6-NEXT:    rldimi 7, 7, 32, 0
27562; PWR6-NEXT:    add 4, 5, 4
27563; PWR6-NEXT:    add 3, 3, 6
27564; PWR6-NEXT:    rldimi 9, 9, 32, 0
27565; PWR6-NEXT:    rldicl 5, 4, 60, 4
27566; PWR6-NEXT:    and 3, 3, 7
27567; PWR6-NEXT:    add 4, 4, 5
27568; PWR6-NEXT:    mulld 3, 3, 9
27569; PWR6-NEXT:    and 4, 4, 7
27570; PWR6-NEXT:    rldicl 3, 3, 8, 56
27571; PWR6-NEXT:    li 5, 60
27572; PWR6-NEXT:    mulld 4, 4, 9
27573; PWR6-NEXT:    subc 6, 3, 5
27574; PWR6-NEXT:    rldicl 4, 4, 8, 56
27575; PWR6-NEXT:    subfe 3, 3, 3
27576; PWR6-NEXT:    subc 5, 4, 5
27577; PWR6-NEXT:    subfe 4, 4, 4
27578; PWR6-NEXT:    blr
27579;
27580; PWR7-LABEL: ult_60_v2i64:
27581; PWR7:       # %bb.0:
27582; PWR7-NEXT:    addi 3, 1, -32
27583; PWR7-NEXT:    li 5, 0
27584; PWR7-NEXT:    li 6, -1
27585; PWR7-NEXT:    stxvd2x 34, 0, 3
27586; PWR7-NEXT:    ld 3, -24(1)
27587; PWR7-NEXT:    ld 4, -32(1)
27588; PWR7-NEXT:    popcntd 3, 3
27589; PWR7-NEXT:    popcntd 4, 4
27590; PWR7-NEXT:    cmpldi 3, 60
27591; PWR7-NEXT:    isellt 3, 6, 5
27592; PWR7-NEXT:    cmpldi 4, 60
27593; PWR7-NEXT:    isellt 4, 6, 5
27594; PWR7-NEXT:    std 3, -8(1)
27595; PWR7-NEXT:    addi 3, 1, -16
27596; PWR7-NEXT:    std 4, -16(1)
27597; PWR7-NEXT:    lxvd2x 34, 0, 3
27598; PWR7-NEXT:    blr
27599;
27600; PWR8-LABEL: ult_60_v2i64:
27601; PWR8:       # %bb.0:
27602; PWR8-NEXT:    addis 3, 2, .LCPI217_0@toc@ha
27603; PWR8-NEXT:    vpopcntd 2, 2
27604; PWR8-NEXT:    addi 3, 3, .LCPI217_0@toc@l
27605; PWR8-NEXT:    lxvd2x 35, 0, 3
27606; PWR8-NEXT:    vcmpgtud 2, 3, 2
27607; PWR8-NEXT:    blr
27608;
27609; PWR9-LABEL: ult_60_v2i64:
27610; PWR9:       # %bb.0:
27611; PWR9-NEXT:    addis 3, 2, .LCPI217_0@toc@ha
27612; PWR9-NEXT:    vpopcntd 2, 2
27613; PWR9-NEXT:    addi 3, 3, .LCPI217_0@toc@l
27614; PWR9-NEXT:    lxvx 35, 0, 3
27615; PWR9-NEXT:    vcmpgtud 2, 3, 2
27616; PWR9-NEXT:    blr
27617  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27618  %3 = icmp ult <2 x i64> %2, <i64 60, i64 60>
27619  %4 = sext <2 x i1> %3 to <2 x i64>
27620  ret <2 x i64> %4
27621}
27622
27623define <2 x i64> @ugt_60_v2i64(<2 x i64> %0) {
27624; PWR5-LABEL: ugt_60_v2i64:
27625; PWR5:       # %bb.0:
27626; PWR5-NEXT:    lis 5, 21845
27627; PWR5-NEXT:    lis 6, 13107
27628; PWR5-NEXT:    ori 5, 5, 21845
27629; PWR5-NEXT:    rotldi 8, 4, 63
27630; PWR5-NEXT:    rotldi 9, 3, 63
27631; PWR5-NEXT:    rldimi 5, 5, 32, 0
27632; PWR5-NEXT:    and 8, 8, 5
27633; PWR5-NEXT:    and 5, 9, 5
27634; PWR5-NEXT:    ori 6, 6, 13107
27635; PWR5-NEXT:    sub 3, 3, 5
27636; PWR5-NEXT:    rldimi 6, 6, 32, 0
27637; PWR5-NEXT:    sub 4, 4, 8
27638; PWR5-NEXT:    and 8, 3, 6
27639; PWR5-NEXT:    rotldi 3, 3, 62
27640; PWR5-NEXT:    and 3, 3, 6
27641; PWR5-NEXT:    lis 7, 3855
27642; PWR5-NEXT:    and 5, 4, 6
27643; PWR5-NEXT:    rotldi 4, 4, 62
27644; PWR5-NEXT:    add 3, 8, 3
27645; PWR5-NEXT:    lis 9, 257
27646; PWR5-NEXT:    ori 7, 7, 3855
27647; PWR5-NEXT:    and 4, 4, 6
27648; PWR5-NEXT:    rldicl 6, 3, 60, 4
27649; PWR5-NEXT:    ori 9, 9, 257
27650; PWR5-NEXT:    rldimi 7, 7, 32, 0
27651; PWR5-NEXT:    add 4, 5, 4
27652; PWR5-NEXT:    add 3, 3, 6
27653; PWR5-NEXT:    rldimi 9, 9, 32, 0
27654; PWR5-NEXT:    rldicl 5, 4, 60, 4
27655; PWR5-NEXT:    and 3, 3, 7
27656; PWR5-NEXT:    add 4, 4, 5
27657; PWR5-NEXT:    mulld 3, 3, 9
27658; PWR5-NEXT:    and 4, 4, 7
27659; PWR5-NEXT:    rldicl 3, 3, 8, 56
27660; PWR5-NEXT:    mulld 4, 4, 9
27661; PWR5-NEXT:    li 5, 60
27662; PWR5-NEXT:    subfic 3, 3, 60
27663; PWR5-NEXT:    rldicl 4, 4, 8, 56
27664; PWR5-NEXT:    subfe 3, 5, 5
27665; PWR5-NEXT:    subfic 4, 4, 60
27666; PWR5-NEXT:    subfe 4, 5, 5
27667; PWR5-NEXT:    blr
27668;
27669; PWR6-LABEL: ugt_60_v2i64:
27670; PWR6:       # %bb.0:
27671; PWR6-NEXT:    lis 5, 21845
27672; PWR6-NEXT:    lis 6, 13107
27673; PWR6-NEXT:    ori 5, 5, 21845
27674; PWR6-NEXT:    rotldi 8, 4, 63
27675; PWR6-NEXT:    rotldi 9, 3, 63
27676; PWR6-NEXT:    rldimi 5, 5, 32, 0
27677; PWR6-NEXT:    and 8, 8, 5
27678; PWR6-NEXT:    and 5, 9, 5
27679; PWR6-NEXT:    ori 6, 6, 13107
27680; PWR6-NEXT:    sub 3, 3, 5
27681; PWR6-NEXT:    rldimi 6, 6, 32, 0
27682; PWR6-NEXT:    sub 4, 4, 8
27683; PWR6-NEXT:    and 8, 3, 6
27684; PWR6-NEXT:    rotldi 3, 3, 62
27685; PWR6-NEXT:    and 3, 3, 6
27686; PWR6-NEXT:    lis 7, 3855
27687; PWR6-NEXT:    and 5, 4, 6
27688; PWR6-NEXT:    rotldi 4, 4, 62
27689; PWR6-NEXT:    add 3, 8, 3
27690; PWR6-NEXT:    lis 9, 257
27691; PWR6-NEXT:    ori 7, 7, 3855
27692; PWR6-NEXT:    and 4, 4, 6
27693; PWR6-NEXT:    rldicl 6, 3, 60, 4
27694; PWR6-NEXT:    ori 9, 9, 257
27695; PWR6-NEXT:    rldimi 7, 7, 32, 0
27696; PWR6-NEXT:    add 4, 5, 4
27697; PWR6-NEXT:    add 3, 3, 6
27698; PWR6-NEXT:    rldimi 9, 9, 32, 0
27699; PWR6-NEXT:    rldicl 5, 4, 60, 4
27700; PWR6-NEXT:    and 3, 3, 7
27701; PWR6-NEXT:    add 4, 4, 5
27702; PWR6-NEXT:    mulld 3, 3, 9
27703; PWR6-NEXT:    and 4, 4, 7
27704; PWR6-NEXT:    rldicl 3, 3, 8, 56
27705; PWR6-NEXT:    mulld 4, 4, 9
27706; PWR6-NEXT:    li 5, 60
27707; PWR6-NEXT:    subfic 3, 3, 60
27708; PWR6-NEXT:    rldicl 4, 4, 8, 56
27709; PWR6-NEXT:    subfe 3, 5, 5
27710; PWR6-NEXT:    subfic 4, 4, 60
27711; PWR6-NEXT:    subfe 4, 5, 5
27712; PWR6-NEXT:    blr
27713;
27714; PWR7-LABEL: ugt_60_v2i64:
27715; PWR7:       # %bb.0:
27716; PWR7-NEXT:    addi 3, 1, -32
27717; PWR7-NEXT:    li 5, 0
27718; PWR7-NEXT:    li 6, -1
27719; PWR7-NEXT:    stxvd2x 34, 0, 3
27720; PWR7-NEXT:    ld 3, -24(1)
27721; PWR7-NEXT:    ld 4, -32(1)
27722; PWR7-NEXT:    popcntd 3, 3
27723; PWR7-NEXT:    popcntd 4, 4
27724; PWR7-NEXT:    cmpldi 3, 60
27725; PWR7-NEXT:    iselgt 3, 6, 5
27726; PWR7-NEXT:    cmpldi 4, 60
27727; PWR7-NEXT:    iselgt 4, 6, 5
27728; PWR7-NEXT:    std 3, -8(1)
27729; PWR7-NEXT:    addi 3, 1, -16
27730; PWR7-NEXT:    std 4, -16(1)
27731; PWR7-NEXT:    lxvd2x 34, 0, 3
27732; PWR7-NEXT:    blr
27733;
27734; PWR8-LABEL: ugt_60_v2i64:
27735; PWR8:       # %bb.0:
27736; PWR8-NEXT:    addis 3, 2, .LCPI218_0@toc@ha
27737; PWR8-NEXT:    vpopcntd 2, 2
27738; PWR8-NEXT:    addi 3, 3, .LCPI218_0@toc@l
27739; PWR8-NEXT:    lxvd2x 35, 0, 3
27740; PWR8-NEXT:    vcmpgtud 2, 2, 3
27741; PWR8-NEXT:    blr
27742;
27743; PWR9-LABEL: ugt_60_v2i64:
27744; PWR9:       # %bb.0:
27745; PWR9-NEXT:    addis 3, 2, .LCPI218_0@toc@ha
27746; PWR9-NEXT:    vpopcntd 2, 2
27747; PWR9-NEXT:    addi 3, 3, .LCPI218_0@toc@l
27748; PWR9-NEXT:    lxvx 35, 0, 3
27749; PWR9-NEXT:    vcmpgtud 2, 2, 3
27750; PWR9-NEXT:    blr
27751  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27752  %3 = icmp ugt <2 x i64> %2, <i64 60, i64 60>
27753  %4 = sext <2 x i1> %3 to <2 x i64>
27754  ret <2 x i64> %4
27755}
27756
27757define <2 x i64> @ult_61_v2i64(<2 x i64> %0) {
27758; PWR5-LABEL: ult_61_v2i64:
27759; PWR5:       # %bb.0:
27760; PWR5-NEXT:    lis 5, 21845
27761; PWR5-NEXT:    lis 6, 13107
27762; PWR5-NEXT:    ori 5, 5, 21845
27763; PWR5-NEXT:    rotldi 8, 4, 63
27764; PWR5-NEXT:    rotldi 9, 3, 63
27765; PWR5-NEXT:    rldimi 5, 5, 32, 0
27766; PWR5-NEXT:    and 8, 8, 5
27767; PWR5-NEXT:    and 5, 9, 5
27768; PWR5-NEXT:    ori 6, 6, 13107
27769; PWR5-NEXT:    sub 3, 3, 5
27770; PWR5-NEXT:    rldimi 6, 6, 32, 0
27771; PWR5-NEXT:    sub 4, 4, 8
27772; PWR5-NEXT:    and 8, 3, 6
27773; PWR5-NEXT:    rotldi 3, 3, 62
27774; PWR5-NEXT:    and 3, 3, 6
27775; PWR5-NEXT:    lis 7, 3855
27776; PWR5-NEXT:    and 5, 4, 6
27777; PWR5-NEXT:    rotldi 4, 4, 62
27778; PWR5-NEXT:    add 3, 8, 3
27779; PWR5-NEXT:    lis 9, 257
27780; PWR5-NEXT:    ori 7, 7, 3855
27781; PWR5-NEXT:    and 4, 4, 6
27782; PWR5-NEXT:    rldicl 6, 3, 60, 4
27783; PWR5-NEXT:    ori 9, 9, 257
27784; PWR5-NEXT:    rldimi 7, 7, 32, 0
27785; PWR5-NEXT:    add 4, 5, 4
27786; PWR5-NEXT:    add 3, 3, 6
27787; PWR5-NEXT:    rldimi 9, 9, 32, 0
27788; PWR5-NEXT:    rldicl 5, 4, 60, 4
27789; PWR5-NEXT:    and 3, 3, 7
27790; PWR5-NEXT:    add 4, 4, 5
27791; PWR5-NEXT:    mulld 3, 3, 9
27792; PWR5-NEXT:    and 4, 4, 7
27793; PWR5-NEXT:    rldicl 3, 3, 8, 56
27794; PWR5-NEXT:    li 5, 61
27795; PWR5-NEXT:    mulld 4, 4, 9
27796; PWR5-NEXT:    subc 6, 3, 5
27797; PWR5-NEXT:    rldicl 4, 4, 8, 56
27798; PWR5-NEXT:    subfe 3, 3, 3
27799; PWR5-NEXT:    subc 5, 4, 5
27800; PWR5-NEXT:    subfe 4, 4, 4
27801; PWR5-NEXT:    blr
27802;
27803; PWR6-LABEL: ult_61_v2i64:
27804; PWR6:       # %bb.0:
27805; PWR6-NEXT:    lis 5, 21845
27806; PWR6-NEXT:    lis 6, 13107
27807; PWR6-NEXT:    ori 5, 5, 21845
27808; PWR6-NEXT:    rotldi 8, 4, 63
27809; PWR6-NEXT:    rotldi 9, 3, 63
27810; PWR6-NEXT:    rldimi 5, 5, 32, 0
27811; PWR6-NEXT:    and 8, 8, 5
27812; PWR6-NEXT:    and 5, 9, 5
27813; PWR6-NEXT:    ori 6, 6, 13107
27814; PWR6-NEXT:    sub 3, 3, 5
27815; PWR6-NEXT:    rldimi 6, 6, 32, 0
27816; PWR6-NEXT:    sub 4, 4, 8
27817; PWR6-NEXT:    and 8, 3, 6
27818; PWR6-NEXT:    rotldi 3, 3, 62
27819; PWR6-NEXT:    and 3, 3, 6
27820; PWR6-NEXT:    lis 7, 3855
27821; PWR6-NEXT:    and 5, 4, 6
27822; PWR6-NEXT:    rotldi 4, 4, 62
27823; PWR6-NEXT:    add 3, 8, 3
27824; PWR6-NEXT:    lis 9, 257
27825; PWR6-NEXT:    ori 7, 7, 3855
27826; PWR6-NEXT:    and 4, 4, 6
27827; PWR6-NEXT:    rldicl 6, 3, 60, 4
27828; PWR6-NEXT:    ori 9, 9, 257
27829; PWR6-NEXT:    rldimi 7, 7, 32, 0
27830; PWR6-NEXT:    add 4, 5, 4
27831; PWR6-NEXT:    add 3, 3, 6
27832; PWR6-NEXT:    rldimi 9, 9, 32, 0
27833; PWR6-NEXT:    rldicl 5, 4, 60, 4
27834; PWR6-NEXT:    and 3, 3, 7
27835; PWR6-NEXT:    add 4, 4, 5
27836; PWR6-NEXT:    mulld 3, 3, 9
27837; PWR6-NEXT:    and 4, 4, 7
27838; PWR6-NEXT:    rldicl 3, 3, 8, 56
27839; PWR6-NEXT:    li 5, 61
27840; PWR6-NEXT:    mulld 4, 4, 9
27841; PWR6-NEXT:    subc 6, 3, 5
27842; PWR6-NEXT:    rldicl 4, 4, 8, 56
27843; PWR6-NEXT:    subfe 3, 3, 3
27844; PWR6-NEXT:    subc 5, 4, 5
27845; PWR6-NEXT:    subfe 4, 4, 4
27846; PWR6-NEXT:    blr
27847;
27848; PWR7-LABEL: ult_61_v2i64:
27849; PWR7:       # %bb.0:
27850; PWR7-NEXT:    addi 3, 1, -32
27851; PWR7-NEXT:    li 5, 0
27852; PWR7-NEXT:    li 6, -1
27853; PWR7-NEXT:    stxvd2x 34, 0, 3
27854; PWR7-NEXT:    ld 3, -24(1)
27855; PWR7-NEXT:    ld 4, -32(1)
27856; PWR7-NEXT:    popcntd 3, 3
27857; PWR7-NEXT:    popcntd 4, 4
27858; PWR7-NEXT:    cmpldi 3, 61
27859; PWR7-NEXT:    isellt 3, 6, 5
27860; PWR7-NEXT:    cmpldi 4, 61
27861; PWR7-NEXT:    isellt 4, 6, 5
27862; PWR7-NEXT:    std 3, -8(1)
27863; PWR7-NEXT:    addi 3, 1, -16
27864; PWR7-NEXT:    std 4, -16(1)
27865; PWR7-NEXT:    lxvd2x 34, 0, 3
27866; PWR7-NEXT:    blr
27867;
27868; PWR8-LABEL: ult_61_v2i64:
27869; PWR8:       # %bb.0:
27870; PWR8-NEXT:    addis 3, 2, .LCPI219_0@toc@ha
27871; PWR8-NEXT:    vpopcntd 2, 2
27872; PWR8-NEXT:    addi 3, 3, .LCPI219_0@toc@l
27873; PWR8-NEXT:    lxvd2x 35, 0, 3
27874; PWR8-NEXT:    vcmpgtud 2, 3, 2
27875; PWR8-NEXT:    blr
27876;
27877; PWR9-LABEL: ult_61_v2i64:
27878; PWR9:       # %bb.0:
27879; PWR9-NEXT:    addis 3, 2, .LCPI219_0@toc@ha
27880; PWR9-NEXT:    vpopcntd 2, 2
27881; PWR9-NEXT:    addi 3, 3, .LCPI219_0@toc@l
27882; PWR9-NEXT:    lxvx 35, 0, 3
27883; PWR9-NEXT:    vcmpgtud 2, 3, 2
27884; PWR9-NEXT:    blr
27885  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
27886  %3 = icmp ult <2 x i64> %2, <i64 61, i64 61>
27887  %4 = sext <2 x i1> %3 to <2 x i64>
27888  ret <2 x i64> %4
27889}
27890
27891define <2 x i64> @ugt_61_v2i64(<2 x i64> %0) {
27892; PWR5-LABEL: ugt_61_v2i64:
27893; PWR5:       # %bb.0:
27894; PWR5-NEXT:    lis 5, 21845
27895; PWR5-NEXT:    lis 6, 13107
27896; PWR5-NEXT:    ori 5, 5, 21845
27897; PWR5-NEXT:    rotldi 8, 4, 63
27898; PWR5-NEXT:    rotldi 9, 3, 63
27899; PWR5-NEXT:    rldimi 5, 5, 32, 0
27900; PWR5-NEXT:    and 8, 8, 5
27901; PWR5-NEXT:    and 5, 9, 5
27902; PWR5-NEXT:    ori 6, 6, 13107
27903; PWR5-NEXT:    sub 3, 3, 5
27904; PWR5-NEXT:    rldimi 6, 6, 32, 0
27905; PWR5-NEXT:    sub 4, 4, 8
27906; PWR5-NEXT:    and 8, 3, 6
27907; PWR5-NEXT:    rotldi 3, 3, 62
27908; PWR5-NEXT:    and 3, 3, 6
27909; PWR5-NEXT:    lis 7, 3855
27910; PWR5-NEXT:    and 5, 4, 6
27911; PWR5-NEXT:    rotldi 4, 4, 62
27912; PWR5-NEXT:    add 3, 8, 3
27913; PWR5-NEXT:    lis 9, 257
27914; PWR5-NEXT:    ori 7, 7, 3855
27915; PWR5-NEXT:    and 4, 4, 6
27916; PWR5-NEXT:    rldicl 6, 3, 60, 4
27917; PWR5-NEXT:    ori 9, 9, 257
27918; PWR5-NEXT:    rldimi 7, 7, 32, 0
27919; PWR5-NEXT:    add 4, 5, 4
27920; PWR5-NEXT:    add 3, 3, 6
27921; PWR5-NEXT:    rldimi 9, 9, 32, 0
27922; PWR5-NEXT:    rldicl 5, 4, 60, 4
27923; PWR5-NEXT:    and 3, 3, 7
27924; PWR5-NEXT:    add 4, 4, 5
27925; PWR5-NEXT:    mulld 3, 3, 9
27926; PWR5-NEXT:    and 4, 4, 7
27927; PWR5-NEXT:    rldicl 3, 3, 8, 56
27928; PWR5-NEXT:    mulld 4, 4, 9
27929; PWR5-NEXT:    li 5, 61
27930; PWR5-NEXT:    subfic 3, 3, 61
27931; PWR5-NEXT:    rldicl 4, 4, 8, 56
27932; PWR5-NEXT:    subfe 3, 5, 5
27933; PWR5-NEXT:    subfic 4, 4, 61
27934; PWR5-NEXT:    subfe 4, 5, 5
27935; PWR5-NEXT:    blr
27936;
27937; PWR6-LABEL: ugt_61_v2i64:
27938; PWR6:       # %bb.0:
27939; PWR6-NEXT:    lis 5, 21845
27940; PWR6-NEXT:    lis 6, 13107
27941; PWR6-NEXT:    ori 5, 5, 21845
27942; PWR6-NEXT:    rotldi 8, 4, 63
27943; PWR6-NEXT:    rotldi 9, 3, 63
27944; PWR6-NEXT:    rldimi 5, 5, 32, 0
27945; PWR6-NEXT:    and 8, 8, 5
27946; PWR6-NEXT:    and 5, 9, 5
27947; PWR6-NEXT:    ori 6, 6, 13107
27948; PWR6-NEXT:    sub 3, 3, 5
27949; PWR6-NEXT:    rldimi 6, 6, 32, 0
27950; PWR6-NEXT:    sub 4, 4, 8
27951; PWR6-NEXT:    and 8, 3, 6
27952; PWR6-NEXT:    rotldi 3, 3, 62
27953; PWR6-NEXT:    and 3, 3, 6
27954; PWR6-NEXT:    lis 7, 3855
27955; PWR6-NEXT:    and 5, 4, 6
27956; PWR6-NEXT:    rotldi 4, 4, 62
27957; PWR6-NEXT:    add 3, 8, 3
27958; PWR6-NEXT:    lis 9, 257
27959; PWR6-NEXT:    ori 7, 7, 3855
27960; PWR6-NEXT:    and 4, 4, 6
27961; PWR6-NEXT:    rldicl 6, 3, 60, 4
27962; PWR6-NEXT:    ori 9, 9, 257
27963; PWR6-NEXT:    rldimi 7, 7, 32, 0
27964; PWR6-NEXT:    add 4, 5, 4
27965; PWR6-NEXT:    add 3, 3, 6
27966; PWR6-NEXT:    rldimi 9, 9, 32, 0
27967; PWR6-NEXT:    rldicl 5, 4, 60, 4
27968; PWR6-NEXT:    and 3, 3, 7
27969; PWR6-NEXT:    add 4, 4, 5
27970; PWR6-NEXT:    mulld 3, 3, 9
27971; PWR6-NEXT:    and 4, 4, 7
27972; PWR6-NEXT:    rldicl 3, 3, 8, 56
27973; PWR6-NEXT:    mulld 4, 4, 9
27974; PWR6-NEXT:    li 5, 61
27975; PWR6-NEXT:    subfic 3, 3, 61
27976; PWR6-NEXT:    rldicl 4, 4, 8, 56
27977; PWR6-NEXT:    subfe 3, 5, 5
27978; PWR6-NEXT:    subfic 4, 4, 61
27979; PWR6-NEXT:    subfe 4, 5, 5
27980; PWR6-NEXT:    blr
27981;
27982; PWR7-LABEL: ugt_61_v2i64:
27983; PWR7:       # %bb.0:
27984; PWR7-NEXT:    addi 3, 1, -32
27985; PWR7-NEXT:    li 5, 0
27986; PWR7-NEXT:    li 6, -1
27987; PWR7-NEXT:    stxvd2x 34, 0, 3
27988; PWR7-NEXT:    ld 3, -24(1)
27989; PWR7-NEXT:    ld 4, -32(1)
27990; PWR7-NEXT:    popcntd 3, 3
27991; PWR7-NEXT:    popcntd 4, 4
27992; PWR7-NEXT:    cmpldi 3, 61
27993; PWR7-NEXT:    iselgt 3, 6, 5
27994; PWR7-NEXT:    cmpldi 4, 61
27995; PWR7-NEXT:    iselgt 4, 6, 5
27996; PWR7-NEXT:    std 3, -8(1)
27997; PWR7-NEXT:    addi 3, 1, -16
27998; PWR7-NEXT:    std 4, -16(1)
27999; PWR7-NEXT:    lxvd2x 34, 0, 3
28000; PWR7-NEXT:    blr
28001;
28002; PWR8-LABEL: ugt_61_v2i64:
28003; PWR8:       # %bb.0:
28004; PWR8-NEXT:    addis 3, 2, .LCPI220_0@toc@ha
28005; PWR8-NEXT:    vpopcntd 2, 2
28006; PWR8-NEXT:    addi 3, 3, .LCPI220_0@toc@l
28007; PWR8-NEXT:    lxvd2x 35, 0, 3
28008; PWR8-NEXT:    vcmpgtud 2, 2, 3
28009; PWR8-NEXT:    blr
28010;
28011; PWR9-LABEL: ugt_61_v2i64:
28012; PWR9:       # %bb.0:
28013; PWR9-NEXT:    addis 3, 2, .LCPI220_0@toc@ha
28014; PWR9-NEXT:    vpopcntd 2, 2
28015; PWR9-NEXT:    addi 3, 3, .LCPI220_0@toc@l
28016; PWR9-NEXT:    lxvx 35, 0, 3
28017; PWR9-NEXT:    vcmpgtud 2, 2, 3
28018; PWR9-NEXT:    blr
28019  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28020  %3 = icmp ugt <2 x i64> %2, <i64 61, i64 61>
28021  %4 = sext <2 x i1> %3 to <2 x i64>
28022  ret <2 x i64> %4
28023}
28024
28025define <2 x i64> @ult_62_v2i64(<2 x i64> %0) {
28026; PWR5-LABEL: ult_62_v2i64:
28027; PWR5:       # %bb.0:
28028; PWR5-NEXT:    lis 5, 21845
28029; PWR5-NEXT:    lis 6, 13107
28030; PWR5-NEXT:    ori 5, 5, 21845
28031; PWR5-NEXT:    rotldi 8, 4, 63
28032; PWR5-NEXT:    rotldi 9, 3, 63
28033; PWR5-NEXT:    rldimi 5, 5, 32, 0
28034; PWR5-NEXT:    and 8, 8, 5
28035; PWR5-NEXT:    and 5, 9, 5
28036; PWR5-NEXT:    ori 6, 6, 13107
28037; PWR5-NEXT:    sub 3, 3, 5
28038; PWR5-NEXT:    rldimi 6, 6, 32, 0
28039; PWR5-NEXT:    sub 4, 4, 8
28040; PWR5-NEXT:    and 8, 3, 6
28041; PWR5-NEXT:    rotldi 3, 3, 62
28042; PWR5-NEXT:    and 3, 3, 6
28043; PWR5-NEXT:    lis 7, 3855
28044; PWR5-NEXT:    and 5, 4, 6
28045; PWR5-NEXT:    rotldi 4, 4, 62
28046; PWR5-NEXT:    add 3, 8, 3
28047; PWR5-NEXT:    lis 9, 257
28048; PWR5-NEXT:    ori 7, 7, 3855
28049; PWR5-NEXT:    and 4, 4, 6
28050; PWR5-NEXT:    rldicl 6, 3, 60, 4
28051; PWR5-NEXT:    ori 9, 9, 257
28052; PWR5-NEXT:    rldimi 7, 7, 32, 0
28053; PWR5-NEXT:    add 4, 5, 4
28054; PWR5-NEXT:    add 3, 3, 6
28055; PWR5-NEXT:    rldimi 9, 9, 32, 0
28056; PWR5-NEXT:    rldicl 5, 4, 60, 4
28057; PWR5-NEXT:    and 3, 3, 7
28058; PWR5-NEXT:    add 4, 4, 5
28059; PWR5-NEXT:    mulld 3, 3, 9
28060; PWR5-NEXT:    and 4, 4, 7
28061; PWR5-NEXT:    rldicl 3, 3, 8, 56
28062; PWR5-NEXT:    li 5, 62
28063; PWR5-NEXT:    mulld 4, 4, 9
28064; PWR5-NEXT:    subc 6, 3, 5
28065; PWR5-NEXT:    rldicl 4, 4, 8, 56
28066; PWR5-NEXT:    subfe 3, 3, 3
28067; PWR5-NEXT:    subc 5, 4, 5
28068; PWR5-NEXT:    subfe 4, 4, 4
28069; PWR5-NEXT:    blr
28070;
28071; PWR6-LABEL: ult_62_v2i64:
28072; PWR6:       # %bb.0:
28073; PWR6-NEXT:    lis 5, 21845
28074; PWR6-NEXT:    lis 6, 13107
28075; PWR6-NEXT:    ori 5, 5, 21845
28076; PWR6-NEXT:    rotldi 8, 4, 63
28077; PWR6-NEXT:    rotldi 9, 3, 63
28078; PWR6-NEXT:    rldimi 5, 5, 32, 0
28079; PWR6-NEXT:    and 8, 8, 5
28080; PWR6-NEXT:    and 5, 9, 5
28081; PWR6-NEXT:    ori 6, 6, 13107
28082; PWR6-NEXT:    sub 3, 3, 5
28083; PWR6-NEXT:    rldimi 6, 6, 32, 0
28084; PWR6-NEXT:    sub 4, 4, 8
28085; PWR6-NEXT:    and 8, 3, 6
28086; PWR6-NEXT:    rotldi 3, 3, 62
28087; PWR6-NEXT:    and 3, 3, 6
28088; PWR6-NEXT:    lis 7, 3855
28089; PWR6-NEXT:    and 5, 4, 6
28090; PWR6-NEXT:    rotldi 4, 4, 62
28091; PWR6-NEXT:    add 3, 8, 3
28092; PWR6-NEXT:    lis 9, 257
28093; PWR6-NEXT:    ori 7, 7, 3855
28094; PWR6-NEXT:    and 4, 4, 6
28095; PWR6-NEXT:    rldicl 6, 3, 60, 4
28096; PWR6-NEXT:    ori 9, 9, 257
28097; PWR6-NEXT:    rldimi 7, 7, 32, 0
28098; PWR6-NEXT:    add 4, 5, 4
28099; PWR6-NEXT:    add 3, 3, 6
28100; PWR6-NEXT:    rldimi 9, 9, 32, 0
28101; PWR6-NEXT:    rldicl 5, 4, 60, 4
28102; PWR6-NEXT:    and 3, 3, 7
28103; PWR6-NEXT:    add 4, 4, 5
28104; PWR6-NEXT:    mulld 3, 3, 9
28105; PWR6-NEXT:    and 4, 4, 7
28106; PWR6-NEXT:    rldicl 3, 3, 8, 56
28107; PWR6-NEXT:    li 5, 62
28108; PWR6-NEXT:    mulld 4, 4, 9
28109; PWR6-NEXT:    subc 6, 3, 5
28110; PWR6-NEXT:    rldicl 4, 4, 8, 56
28111; PWR6-NEXT:    subfe 3, 3, 3
28112; PWR6-NEXT:    subc 5, 4, 5
28113; PWR6-NEXT:    subfe 4, 4, 4
28114; PWR6-NEXT:    blr
28115;
28116; PWR7-LABEL: ult_62_v2i64:
28117; PWR7:       # %bb.0:
28118; PWR7-NEXT:    addi 3, 1, -32
28119; PWR7-NEXT:    li 5, 0
28120; PWR7-NEXT:    li 6, -1
28121; PWR7-NEXT:    stxvd2x 34, 0, 3
28122; PWR7-NEXT:    ld 3, -24(1)
28123; PWR7-NEXT:    ld 4, -32(1)
28124; PWR7-NEXT:    popcntd 3, 3
28125; PWR7-NEXT:    popcntd 4, 4
28126; PWR7-NEXT:    cmpldi 3, 62
28127; PWR7-NEXT:    isellt 3, 6, 5
28128; PWR7-NEXT:    cmpldi 4, 62
28129; PWR7-NEXT:    isellt 4, 6, 5
28130; PWR7-NEXT:    std 3, -8(1)
28131; PWR7-NEXT:    addi 3, 1, -16
28132; PWR7-NEXT:    std 4, -16(1)
28133; PWR7-NEXT:    lxvd2x 34, 0, 3
28134; PWR7-NEXT:    blr
28135;
28136; PWR8-LABEL: ult_62_v2i64:
28137; PWR8:       # %bb.0:
28138; PWR8-NEXT:    addis 3, 2, .LCPI221_0@toc@ha
28139; PWR8-NEXT:    vpopcntd 2, 2
28140; PWR8-NEXT:    addi 3, 3, .LCPI221_0@toc@l
28141; PWR8-NEXT:    lxvd2x 35, 0, 3
28142; PWR8-NEXT:    vcmpgtud 2, 3, 2
28143; PWR8-NEXT:    blr
28144;
28145; PWR9-LABEL: ult_62_v2i64:
28146; PWR9:       # %bb.0:
28147; PWR9-NEXT:    addis 3, 2, .LCPI221_0@toc@ha
28148; PWR9-NEXT:    vpopcntd 2, 2
28149; PWR9-NEXT:    addi 3, 3, .LCPI221_0@toc@l
28150; PWR9-NEXT:    lxvx 35, 0, 3
28151; PWR9-NEXT:    vcmpgtud 2, 3, 2
28152; PWR9-NEXT:    blr
28153  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28154  %3 = icmp ult <2 x i64> %2, <i64 62, i64 62>
28155  %4 = sext <2 x i1> %3 to <2 x i64>
28156  ret <2 x i64> %4
28157}
28158
28159define <2 x i64> @ugt_62_v2i64(<2 x i64> %0) {
28160; PWR5-LABEL: ugt_62_v2i64:
28161; PWR5:       # %bb.0:
28162; PWR5-NEXT:    lis 5, 21845
28163; PWR5-NEXT:    lis 6, 13107
28164; PWR5-NEXT:    ori 5, 5, 21845
28165; PWR5-NEXT:    rotldi 8, 4, 63
28166; PWR5-NEXT:    rotldi 9, 3, 63
28167; PWR5-NEXT:    rldimi 5, 5, 32, 0
28168; PWR5-NEXT:    and 8, 8, 5
28169; PWR5-NEXT:    and 5, 9, 5
28170; PWR5-NEXT:    ori 6, 6, 13107
28171; PWR5-NEXT:    sub 3, 3, 5
28172; PWR5-NEXT:    rldimi 6, 6, 32, 0
28173; PWR5-NEXT:    sub 4, 4, 8
28174; PWR5-NEXT:    and 8, 3, 6
28175; PWR5-NEXT:    rotldi 3, 3, 62
28176; PWR5-NEXT:    and 3, 3, 6
28177; PWR5-NEXT:    lis 7, 3855
28178; PWR5-NEXT:    and 5, 4, 6
28179; PWR5-NEXT:    rotldi 4, 4, 62
28180; PWR5-NEXT:    add 3, 8, 3
28181; PWR5-NEXT:    lis 9, 257
28182; PWR5-NEXT:    ori 7, 7, 3855
28183; PWR5-NEXT:    and 4, 4, 6
28184; PWR5-NEXT:    rldicl 6, 3, 60, 4
28185; PWR5-NEXT:    ori 9, 9, 257
28186; PWR5-NEXT:    rldimi 7, 7, 32, 0
28187; PWR5-NEXT:    add 4, 5, 4
28188; PWR5-NEXT:    add 3, 3, 6
28189; PWR5-NEXT:    rldimi 9, 9, 32, 0
28190; PWR5-NEXT:    rldicl 5, 4, 60, 4
28191; PWR5-NEXT:    and 3, 3, 7
28192; PWR5-NEXT:    add 4, 4, 5
28193; PWR5-NEXT:    mulld 3, 3, 9
28194; PWR5-NEXT:    and 4, 4, 7
28195; PWR5-NEXT:    rldicl 3, 3, 8, 56
28196; PWR5-NEXT:    mulld 4, 4, 9
28197; PWR5-NEXT:    li 5, 62
28198; PWR5-NEXT:    subfic 3, 3, 62
28199; PWR5-NEXT:    rldicl 4, 4, 8, 56
28200; PWR5-NEXT:    subfe 3, 5, 5
28201; PWR5-NEXT:    subfic 4, 4, 62
28202; PWR5-NEXT:    subfe 4, 5, 5
28203; PWR5-NEXT:    blr
28204;
28205; PWR6-LABEL: ugt_62_v2i64:
28206; PWR6:       # %bb.0:
28207; PWR6-NEXT:    lis 5, 21845
28208; PWR6-NEXT:    lis 6, 13107
28209; PWR6-NEXT:    ori 5, 5, 21845
28210; PWR6-NEXT:    rotldi 8, 4, 63
28211; PWR6-NEXT:    rotldi 9, 3, 63
28212; PWR6-NEXT:    rldimi 5, 5, 32, 0
28213; PWR6-NEXT:    and 8, 8, 5
28214; PWR6-NEXT:    and 5, 9, 5
28215; PWR6-NEXT:    ori 6, 6, 13107
28216; PWR6-NEXT:    sub 3, 3, 5
28217; PWR6-NEXT:    rldimi 6, 6, 32, 0
28218; PWR6-NEXT:    sub 4, 4, 8
28219; PWR6-NEXT:    and 8, 3, 6
28220; PWR6-NEXT:    rotldi 3, 3, 62
28221; PWR6-NEXT:    and 3, 3, 6
28222; PWR6-NEXT:    lis 7, 3855
28223; PWR6-NEXT:    and 5, 4, 6
28224; PWR6-NEXT:    rotldi 4, 4, 62
28225; PWR6-NEXT:    add 3, 8, 3
28226; PWR6-NEXT:    lis 9, 257
28227; PWR6-NEXT:    ori 7, 7, 3855
28228; PWR6-NEXT:    and 4, 4, 6
28229; PWR6-NEXT:    rldicl 6, 3, 60, 4
28230; PWR6-NEXT:    ori 9, 9, 257
28231; PWR6-NEXT:    rldimi 7, 7, 32, 0
28232; PWR6-NEXT:    add 4, 5, 4
28233; PWR6-NEXT:    add 3, 3, 6
28234; PWR6-NEXT:    rldimi 9, 9, 32, 0
28235; PWR6-NEXT:    rldicl 5, 4, 60, 4
28236; PWR6-NEXT:    and 3, 3, 7
28237; PWR6-NEXT:    add 4, 4, 5
28238; PWR6-NEXT:    mulld 3, 3, 9
28239; PWR6-NEXT:    and 4, 4, 7
28240; PWR6-NEXT:    rldicl 3, 3, 8, 56
28241; PWR6-NEXT:    mulld 4, 4, 9
28242; PWR6-NEXT:    li 5, 62
28243; PWR6-NEXT:    subfic 3, 3, 62
28244; PWR6-NEXT:    rldicl 4, 4, 8, 56
28245; PWR6-NEXT:    subfe 3, 5, 5
28246; PWR6-NEXT:    subfic 4, 4, 62
28247; PWR6-NEXT:    subfe 4, 5, 5
28248; PWR6-NEXT:    blr
28249;
28250; PWR7-LABEL: ugt_62_v2i64:
28251; PWR7:       # %bb.0:
28252; PWR7-NEXT:    addi 3, 1, -32
28253; PWR7-NEXT:    li 5, 0
28254; PWR7-NEXT:    li 6, -1
28255; PWR7-NEXT:    stxvd2x 34, 0, 3
28256; PWR7-NEXT:    ld 3, -24(1)
28257; PWR7-NEXT:    ld 4, -32(1)
28258; PWR7-NEXT:    popcntd 3, 3
28259; PWR7-NEXT:    popcntd 4, 4
28260; PWR7-NEXT:    cmpldi 3, 62
28261; PWR7-NEXT:    iselgt 3, 6, 5
28262; PWR7-NEXT:    cmpldi 4, 62
28263; PWR7-NEXT:    iselgt 4, 6, 5
28264; PWR7-NEXT:    std 3, -8(1)
28265; PWR7-NEXT:    addi 3, 1, -16
28266; PWR7-NEXT:    std 4, -16(1)
28267; PWR7-NEXT:    lxvd2x 34, 0, 3
28268; PWR7-NEXT:    blr
28269;
28270; PWR8-LABEL: ugt_62_v2i64:
28271; PWR8:       # %bb.0:
28272; PWR8-NEXT:    addis 3, 2, .LCPI222_0@toc@ha
28273; PWR8-NEXT:    vpopcntd 2, 2
28274; PWR8-NEXT:    addi 3, 3, .LCPI222_0@toc@l
28275; PWR8-NEXT:    lxvd2x 35, 0, 3
28276; PWR8-NEXT:    vcmpgtud 2, 2, 3
28277; PWR8-NEXT:    blr
28278;
28279; PWR9-LABEL: ugt_62_v2i64:
28280; PWR9:       # %bb.0:
28281; PWR9-NEXT:    addis 3, 2, .LCPI222_0@toc@ha
28282; PWR9-NEXT:    vpopcntd 2, 2
28283; PWR9-NEXT:    addi 3, 3, .LCPI222_0@toc@l
28284; PWR9-NEXT:    lxvx 35, 0, 3
28285; PWR9-NEXT:    vcmpgtud 2, 2, 3
28286; PWR9-NEXT:    blr
28287  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28288  %3 = icmp ugt <2 x i64> %2, <i64 62, i64 62>
28289  %4 = sext <2 x i1> %3 to <2 x i64>
28290  ret <2 x i64> %4
28291}
28292
28293define <2 x i64> @ult_63_v2i64(<2 x i64> %0) {
28294; PWR5-LABEL: ult_63_v2i64:
28295; PWR5:       # %bb.0:
28296; PWR5-NEXT:    lis 5, 21845
28297; PWR5-NEXT:    lis 6, 13107
28298; PWR5-NEXT:    ori 5, 5, 21845
28299; PWR5-NEXT:    rotldi 8, 4, 63
28300; PWR5-NEXT:    rotldi 9, 3, 63
28301; PWR5-NEXT:    rldimi 5, 5, 32, 0
28302; PWR5-NEXT:    and 8, 8, 5
28303; PWR5-NEXT:    and 5, 9, 5
28304; PWR5-NEXT:    ori 6, 6, 13107
28305; PWR5-NEXT:    sub 3, 3, 5
28306; PWR5-NEXT:    rldimi 6, 6, 32, 0
28307; PWR5-NEXT:    sub 4, 4, 8
28308; PWR5-NEXT:    and 8, 3, 6
28309; PWR5-NEXT:    rotldi 3, 3, 62
28310; PWR5-NEXT:    and 3, 3, 6
28311; PWR5-NEXT:    lis 7, 3855
28312; PWR5-NEXT:    and 5, 4, 6
28313; PWR5-NEXT:    rotldi 4, 4, 62
28314; PWR5-NEXT:    add 3, 8, 3
28315; PWR5-NEXT:    lis 9, 257
28316; PWR5-NEXT:    ori 7, 7, 3855
28317; PWR5-NEXT:    and 4, 4, 6
28318; PWR5-NEXT:    rldicl 6, 3, 60, 4
28319; PWR5-NEXT:    ori 9, 9, 257
28320; PWR5-NEXT:    rldimi 7, 7, 32, 0
28321; PWR5-NEXT:    add 4, 5, 4
28322; PWR5-NEXT:    add 3, 3, 6
28323; PWR5-NEXT:    rldimi 9, 9, 32, 0
28324; PWR5-NEXT:    rldicl 5, 4, 60, 4
28325; PWR5-NEXT:    and 3, 3, 7
28326; PWR5-NEXT:    add 4, 4, 5
28327; PWR5-NEXT:    mulld 3, 3, 9
28328; PWR5-NEXT:    and 4, 4, 7
28329; PWR5-NEXT:    rldicl 3, 3, 8, 56
28330; PWR5-NEXT:    li 5, 63
28331; PWR5-NEXT:    mulld 4, 4, 9
28332; PWR5-NEXT:    subc 6, 3, 5
28333; PWR5-NEXT:    rldicl 4, 4, 8, 56
28334; PWR5-NEXT:    subfe 3, 3, 3
28335; PWR5-NEXT:    subc 5, 4, 5
28336; PWR5-NEXT:    subfe 4, 4, 4
28337; PWR5-NEXT:    blr
28338;
28339; PWR6-LABEL: ult_63_v2i64:
28340; PWR6:       # %bb.0:
28341; PWR6-NEXT:    lis 5, 21845
28342; PWR6-NEXT:    lis 6, 13107
28343; PWR6-NEXT:    ori 5, 5, 21845
28344; PWR6-NEXT:    rotldi 8, 4, 63
28345; PWR6-NEXT:    rotldi 9, 3, 63
28346; PWR6-NEXT:    rldimi 5, 5, 32, 0
28347; PWR6-NEXT:    and 8, 8, 5
28348; PWR6-NEXT:    and 5, 9, 5
28349; PWR6-NEXT:    ori 6, 6, 13107
28350; PWR6-NEXT:    sub 3, 3, 5
28351; PWR6-NEXT:    rldimi 6, 6, 32, 0
28352; PWR6-NEXT:    sub 4, 4, 8
28353; PWR6-NEXT:    and 8, 3, 6
28354; PWR6-NEXT:    rotldi 3, 3, 62
28355; PWR6-NEXT:    and 3, 3, 6
28356; PWR6-NEXT:    lis 7, 3855
28357; PWR6-NEXT:    and 5, 4, 6
28358; PWR6-NEXT:    rotldi 4, 4, 62
28359; PWR6-NEXT:    add 3, 8, 3
28360; PWR6-NEXT:    lis 9, 257
28361; PWR6-NEXT:    ori 7, 7, 3855
28362; PWR6-NEXT:    and 4, 4, 6
28363; PWR6-NEXT:    rldicl 6, 3, 60, 4
28364; PWR6-NEXT:    ori 9, 9, 257
28365; PWR6-NEXT:    rldimi 7, 7, 32, 0
28366; PWR6-NEXT:    add 4, 5, 4
28367; PWR6-NEXT:    add 3, 3, 6
28368; PWR6-NEXT:    rldimi 9, 9, 32, 0
28369; PWR6-NEXT:    rldicl 5, 4, 60, 4
28370; PWR6-NEXT:    and 3, 3, 7
28371; PWR6-NEXT:    add 4, 4, 5
28372; PWR6-NEXT:    mulld 3, 3, 9
28373; PWR6-NEXT:    and 4, 4, 7
28374; PWR6-NEXT:    rldicl 3, 3, 8, 56
28375; PWR6-NEXT:    li 5, 63
28376; PWR6-NEXT:    mulld 4, 4, 9
28377; PWR6-NEXT:    subc 6, 3, 5
28378; PWR6-NEXT:    rldicl 4, 4, 8, 56
28379; PWR6-NEXT:    subfe 3, 3, 3
28380; PWR6-NEXT:    subc 5, 4, 5
28381; PWR6-NEXT:    subfe 4, 4, 4
28382; PWR6-NEXT:    blr
28383;
28384; PWR7-LABEL: ult_63_v2i64:
28385; PWR7:       # %bb.0:
28386; PWR7-NEXT:    addi 3, 1, -32
28387; PWR7-NEXT:    li 5, 0
28388; PWR7-NEXT:    li 6, -1
28389; PWR7-NEXT:    stxvd2x 34, 0, 3
28390; PWR7-NEXT:    ld 3, -24(1)
28391; PWR7-NEXT:    ld 4, -32(1)
28392; PWR7-NEXT:    popcntd 3, 3
28393; PWR7-NEXT:    popcntd 4, 4
28394; PWR7-NEXT:    cmpldi 3, 63
28395; PWR7-NEXT:    isellt 3, 6, 5
28396; PWR7-NEXT:    cmpldi 4, 63
28397; PWR7-NEXT:    isellt 4, 6, 5
28398; PWR7-NEXT:    std 3, -8(1)
28399; PWR7-NEXT:    addi 3, 1, -16
28400; PWR7-NEXT:    std 4, -16(1)
28401; PWR7-NEXT:    lxvd2x 34, 0, 3
28402; PWR7-NEXT:    blr
28403;
28404; PWR8-LABEL: ult_63_v2i64:
28405; PWR8:       # %bb.0:
28406; PWR8-NEXT:    addis 3, 2, .LCPI223_0@toc@ha
28407; PWR8-NEXT:    vpopcntd 2, 2
28408; PWR8-NEXT:    addi 3, 3, .LCPI223_0@toc@l
28409; PWR8-NEXT:    lxvd2x 35, 0, 3
28410; PWR8-NEXT:    vcmpgtud 2, 3, 2
28411; PWR8-NEXT:    blr
28412;
28413; PWR9-LABEL: ult_63_v2i64:
28414; PWR9:       # %bb.0:
28415; PWR9-NEXT:    addis 3, 2, .LCPI223_0@toc@ha
28416; PWR9-NEXT:    vpopcntd 2, 2
28417; PWR9-NEXT:    addi 3, 3, .LCPI223_0@toc@l
28418; PWR9-NEXT:    lxvx 35, 0, 3
28419; PWR9-NEXT:    vcmpgtud 2, 3, 2
28420; PWR9-NEXT:    blr
28421  %2 = tail call <2 x i64> @llvm.ctpop.v2i64(<2 x i64> %0)
28422  %3 = icmp ult <2 x i64> %2, <i64 63, i64 63>
28423  %4 = sext <2 x i1> %3 to <2 x i64>
28424  ret <2 x i64> %4
28425}
28426
28427declare <16 x i8> @llvm.ctpop.v16i8(<16 x i8>)
28428declare <8 x i16> @llvm.ctpop.v8i16(<8 x i16>)
28429declare <4 x i32> @llvm.ctpop.v4i32(<4 x i32>)
28430declare <2 x i64> @llvm.ctpop.v2i64(<2 x i64>)
28431