xref: /llvm-project/llvm/test/CodeGen/VE/Scalar/select_cc.ll (revision 33dda45dde678f6f2efa24d7ca837cd6ad8f44d7)
1; RUN: llc < %s -mtriple=ve | FileCheck %s
2
3;;; Test all combination of input type and output type among following types.
4;;;
5;;; Types:
6;;;  i1/i8/u8/i16/u16/i32/u32/i64/u64/i128/u128/float/double/fp128
7
8; Function Attrs: norecurse nounwind readnone
9define zeroext i1 @select_cc_i1_i1(i1 zeroext %0, i1 zeroext %1, i1 zeroext %2, i1 zeroext %3) {
10; CHECK-LABEL: select_cc_i1_i1:
11; CHECK:       # %bb.0:
12; CHECK-NEXT:    xor %s0, %s0, %s1
13; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
14; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
15; CHECK-NEXT:    b.l.t (, %s10)
16  %5 = xor i1 %0, %1
17  %6 = select i1 %5, i1 %3, i1 %2
18  ret i1 %6
19}
20
21; Function Attrs: norecurse nounwind readnone
22define zeroext i1 @select_cc_i8_i1(i8 signext %0, i8 signext %1, i1 zeroext %2, i1 zeroext %3) {
23; CHECK-LABEL: select_cc_i8_i1:
24; CHECK:       # %bb.0:
25; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
26; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
27; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
28; CHECK-NEXT:    b.l.t (, %s10)
29  %5 = icmp eq i8 %0, %1
30  %6 = select i1 %5, i1 %2, i1 %3
31  ret i1 %6
32}
33
34; Function Attrs: norecurse nounwind readnone
35define zeroext i1 @select_cc_u8_i1(i8 zeroext %0, i8 zeroext %1, i1 zeroext %2, i1 zeroext %3) {
36; CHECK-LABEL: select_cc_u8_i1:
37; CHECK:       # %bb.0:
38; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
39; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
40; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
41; CHECK-NEXT:    b.l.t (, %s10)
42  %5 = icmp eq i8 %0, %1
43  %6 = select i1 %5, i1 %2, i1 %3
44  ret i1 %6
45}
46
47; Function Attrs: norecurse nounwind readnone
48define zeroext i1 @select_cc_i16_i1(i16 signext %0, i16 signext %1, i1 zeroext %2, i1 zeroext %3) {
49; CHECK-LABEL: select_cc_i16_i1:
50; CHECK:       # %bb.0:
51; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
52; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
53; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
54; CHECK-NEXT:    b.l.t (, %s10)
55  %5 = icmp eq i16 %0, %1
56  %6 = select i1 %5, i1 %2, i1 %3
57  ret i1 %6
58}
59
60; Function Attrs: norecurse nounwind readnone
61define zeroext i1 @select_cc_u16_i1(i16 zeroext %0, i16 zeroext %1, i1 zeroext %2, i1 zeroext %3) {
62; CHECK-LABEL: select_cc_u16_i1:
63; CHECK:       # %bb.0:
64; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
65; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
66; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
67; CHECK-NEXT:    b.l.t (, %s10)
68  %5 = icmp eq i16 %0, %1
69  %6 = select i1 %5, i1 %2, i1 %3
70  ret i1 %6
71}
72
73; Function Attrs: norecurse nounwind readnone
74define zeroext i1 @select_cc_i32_i1(i32 signext %0, i32 signext %1, i1 zeroext %2, i1 zeroext %3) {
75; CHECK-LABEL: select_cc_i32_i1:
76; CHECK:       # %bb.0:
77; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
78; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
79; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
80; CHECK-NEXT:    b.l.t (, %s10)
81  %5 = icmp eq i32 %0, %1
82  %6 = select i1 %5, i1 %2, i1 %3
83  ret i1 %6
84}
85
86; Function Attrs: norecurse nounwind readnone
87define zeroext i1 @select_cc_u32_i1(i32 zeroext %0, i32 zeroext %1, i1 zeroext %2, i1 zeroext %3) {
88; CHECK-LABEL: select_cc_u32_i1:
89; CHECK:       # %bb.0:
90; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
91; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
92; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
93; CHECK-NEXT:    b.l.t (, %s10)
94  %5 = icmp eq i32 %0, %1
95  %6 = select i1 %5, i1 %2, i1 %3
96  ret i1 %6
97}
98
99; Function Attrs: norecurse nounwind readnone
100define zeroext i1 @select_cc_i64_i1(i64 %0, i64 %1, i1 zeroext %2, i1 zeroext %3) {
101; CHECK-LABEL: select_cc_i64_i1:
102; CHECK:       # %bb.0:
103; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
104; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
105; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
106; CHECK-NEXT:    b.l.t (, %s10)
107  %5 = icmp eq i64 %0, %1
108  %6 = select i1 %5, i1 %2, i1 %3
109  ret i1 %6
110}
111
112; Function Attrs: norecurse nounwind readnone
113define zeroext i1 @select_cc_u64_i1(i64 %0, i64 %1, i1 zeroext %2, i1 zeroext %3) {
114; CHECK-LABEL: select_cc_u64_i1:
115; CHECK:       # %bb.0:
116; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
117; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
118; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
119; CHECK-NEXT:    b.l.t (, %s10)
120  %5 = icmp eq i64 %0, %1
121  %6 = select i1 %5, i1 %2, i1 %3
122  ret i1 %6
123}
124
125; Function Attrs: norecurse nounwind readnone
126define zeroext i1 @select_cc_i128_i1(i128 %0, i128 %1, i1 zeroext %2, i1 zeroext %3) {
127; CHECK-LABEL: select_cc_i128_i1:
128; CHECK:       # %bb.0:
129; CHECK-NEXT:    xor %s1, %s1, %s3
130; CHECK-NEXT:    xor %s0, %s0, %s2
131; CHECK-NEXT:    or %s0, %s0, %s1
132; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
133; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
134; CHECK-NEXT:    b.l.t (, %s10)
135  %5 = icmp eq i128 %0, %1
136  %6 = select i1 %5, i1 %2, i1 %3
137  ret i1 %6
138}
139
140; Function Attrs: norecurse nounwind readnone
141define zeroext i1 @select_cc_u128_i1(i128 %0, i128 %1, i1 zeroext %2, i1 zeroext %3) {
142; CHECK-LABEL: select_cc_u128_i1:
143; CHECK:       # %bb.0:
144; CHECK-NEXT:    xor %s1, %s1, %s3
145; CHECK-NEXT:    xor %s0, %s0, %s2
146; CHECK-NEXT:    or %s0, %s0, %s1
147; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
148; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
149; CHECK-NEXT:    b.l.t (, %s10)
150  %5 = icmp eq i128 %0, %1
151  %6 = select i1 %5, i1 %2, i1 %3
152  ret i1 %6
153}
154
155; Function Attrs: norecurse nounwind readnone
156define zeroext i1 @select_cc_float_i1(float %0, float %1, i1 zeroext %2, i1 zeroext %3) {
157; CHECK-LABEL: select_cc_float_i1:
158; CHECK:       # %bb.0:
159; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
160; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
161; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
162; CHECK-NEXT:    b.l.t (, %s10)
163  %5 = fcmp fast oeq float %0, %1
164  %6 = select i1 %5, i1 %2, i1 %3
165  ret i1 %6
166}
167
168; Function Attrs: norecurse nounwind readnone
169define zeroext i1 @select_cc_double_i1(double %0, double %1, i1 zeroext %2, i1 zeroext %3) {
170; CHECK-LABEL: select_cc_double_i1:
171; CHECK:       # %bb.0:
172; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
173; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
174; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
175; CHECK-NEXT:    b.l.t (, %s10)
176  %5 = fcmp fast oeq double %0, %1
177  %6 = select i1 %5, i1 %2, i1 %3
178  ret i1 %6
179}
180
181; Function Attrs: norecurse nounwind readnone
182define zeroext i1 @select_cc_quad_i1(fp128 %0, fp128 %1, i1 zeroext %2, i1 zeroext %3) {
183; CHECK-LABEL: select_cc_quad_i1:
184; CHECK:       # %bb.0:
185; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
186; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
187; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
188; CHECK-NEXT:    b.l.t (, %s10)
189  %5 = fcmp fast oeq fp128 %0, %1
190  %6 = select i1 %5, i1 %2, i1 %3
191  ret i1 %6
192}
193
194; Function Attrs: norecurse nounwind readnone
195define signext i8 @select_cc_i1_i8(i1 zeroext %0, i1 zeroext %1, i8 signext %2, i8 signext %3) {
196; CHECK-LABEL: select_cc_i1_i8:
197; CHECK:       # %bb.0:
198; CHECK-NEXT:    xor %s0, %s0, %s1
199; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
200; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
201; CHECK-NEXT:    b.l.t (, %s10)
202  %5 = xor i1 %0, %1
203  %6 = select i1 %5, i8 %3, i8 %2
204  ret i8 %6
205}
206
207; Function Attrs: norecurse nounwind readnone
208define signext i8 @select_cc_i8_i8(i8 signext %0, i8 signext %1, i8 signext %2, i8 signext %3) {
209; CHECK-LABEL: select_cc_i8_i8:
210; CHECK:       # %bb.0:
211; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
212; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
213; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
214; CHECK-NEXT:    b.l.t (, %s10)
215  %5 = icmp eq i8 %0, %1
216  %6 = select i1 %5, i8 %2, i8 %3
217  ret i8 %6
218}
219
220; Function Attrs: norecurse nounwind readnone
221define signext i8 @select_cc_u8_i8(i8 zeroext %0, i8 zeroext %1, i8 signext %2, i8 signext %3) {
222; CHECK-LABEL: select_cc_u8_i8:
223; CHECK:       # %bb.0:
224; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
225; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
226; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
227; CHECK-NEXT:    b.l.t (, %s10)
228  %5 = icmp eq i8 %0, %1
229  %6 = select i1 %5, i8 %2, i8 %3
230  ret i8 %6
231}
232
233; Function Attrs: norecurse nounwind readnone
234define signext i8 @select_cc_i16_i8(i16 signext %0, i16 signext %1, i8 signext %2, i8 signext %3) {
235; CHECK-LABEL: select_cc_i16_i8:
236; CHECK:       # %bb.0:
237; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
238; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
239; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
240; CHECK-NEXT:    b.l.t (, %s10)
241  %5 = icmp eq i16 %0, %1
242  %6 = select i1 %5, i8 %2, i8 %3
243  ret i8 %6
244}
245
246; Function Attrs: norecurse nounwind readnone
247define signext i8 @select_cc_u16_i8(i16 zeroext %0, i16 zeroext %1, i8 signext %2, i8 signext %3) {
248; CHECK-LABEL: select_cc_u16_i8:
249; CHECK:       # %bb.0:
250; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
251; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
252; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
253; CHECK-NEXT:    b.l.t (, %s10)
254  %5 = icmp eq i16 %0, %1
255  %6 = select i1 %5, i8 %2, i8 %3
256  ret i8 %6
257}
258
259; Function Attrs: norecurse nounwind readnone
260define signext i8 @select_cc_i32_i8(i32 signext %0, i32 signext %1, i8 signext %2, i8 signext %3) {
261; CHECK-LABEL: select_cc_i32_i8:
262; CHECK:       # %bb.0:
263; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
264; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
265; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
266; CHECK-NEXT:    b.l.t (, %s10)
267  %5 = icmp eq i32 %0, %1
268  %6 = select i1 %5, i8 %2, i8 %3
269  ret i8 %6
270}
271
272; Function Attrs: norecurse nounwind readnone
273define signext i8 @select_cc_u32_i8(i32 zeroext %0, i32 zeroext %1, i8 signext %2, i8 signext %3) {
274; CHECK-LABEL: select_cc_u32_i8:
275; CHECK:       # %bb.0:
276; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
277; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
278; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
279; CHECK-NEXT:    b.l.t (, %s10)
280  %5 = icmp eq i32 %0, %1
281  %6 = select i1 %5, i8 %2, i8 %3
282  ret i8 %6
283}
284
285; Function Attrs: norecurse nounwind readnone
286define signext i8 @select_cc_i64_i8(i64 %0, i64 %1, i8 signext %2, i8 signext %3) {
287; CHECK-LABEL: select_cc_i64_i8:
288; CHECK:       # %bb.0:
289; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
290; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
291; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
292; CHECK-NEXT:    b.l.t (, %s10)
293  %5 = icmp eq i64 %0, %1
294  %6 = select i1 %5, i8 %2, i8 %3
295  ret i8 %6
296}
297
298; Function Attrs: norecurse nounwind readnone
299define signext i8 @select_cc_u64_i8(i64 %0, i64 %1, i8 signext %2, i8 signext %3) {
300; CHECK-LABEL: select_cc_u64_i8:
301; CHECK:       # %bb.0:
302; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
303; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
304; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
305; CHECK-NEXT:    b.l.t (, %s10)
306  %5 = icmp eq i64 %0, %1
307  %6 = select i1 %5, i8 %2, i8 %3
308  ret i8 %6
309}
310
311; Function Attrs: norecurse nounwind readnone
312define signext i8 @select_cc_i128_i8(i128 %0, i128 %1, i8 signext %2, i8 signext %3) {
313; CHECK-LABEL: select_cc_i128_i8:
314; CHECK:       # %bb.0:
315; CHECK-NEXT:    xor %s1, %s1, %s3
316; CHECK-NEXT:    xor %s0, %s0, %s2
317; CHECK-NEXT:    or %s0, %s0, %s1
318; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
319; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
320; CHECK-NEXT:    b.l.t (, %s10)
321  %5 = icmp eq i128 %0, %1
322  %6 = select i1 %5, i8 %2, i8 %3
323  ret i8 %6
324}
325
326; Function Attrs: norecurse nounwind readnone
327define signext i8 @select_cc_u128_i8(i128 %0, i128 %1, i8 signext %2, i8 signext %3) {
328; CHECK-LABEL: select_cc_u128_i8:
329; CHECK:       # %bb.0:
330; CHECK-NEXT:    xor %s1, %s1, %s3
331; CHECK-NEXT:    xor %s0, %s0, %s2
332; CHECK-NEXT:    or %s0, %s0, %s1
333; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
334; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
335; CHECK-NEXT:    b.l.t (, %s10)
336  %5 = icmp eq i128 %0, %1
337  %6 = select i1 %5, i8 %2, i8 %3
338  ret i8 %6
339}
340
341; Function Attrs: norecurse nounwind readnone
342define signext i8 @select_cc_float_i8(float %0, float %1, i8 signext %2, i8 signext %3) {
343; CHECK-LABEL: select_cc_float_i8:
344; CHECK:       # %bb.0:
345; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
346; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
347; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
348; CHECK-NEXT:    b.l.t (, %s10)
349  %5 = fcmp fast oeq float %0, %1
350  %6 = select i1 %5, i8 %2, i8 %3
351  ret i8 %6
352}
353
354; Function Attrs: norecurse nounwind readnone
355define signext i8 @select_cc_double_i8(double %0, double %1, i8 signext %2, i8 signext %3) {
356; CHECK-LABEL: select_cc_double_i8:
357; CHECK:       # %bb.0:
358; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
359; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
360; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
361; CHECK-NEXT:    b.l.t (, %s10)
362  %5 = fcmp fast oeq double %0, %1
363  %6 = select i1 %5, i8 %2, i8 %3
364  ret i8 %6
365}
366
367; Function Attrs: norecurse nounwind readnone
368define signext i8 @select_cc_quad_i8(fp128 %0, fp128 %1, i8 signext %2, i8 signext %3) {
369; CHECK-LABEL: select_cc_quad_i8:
370; CHECK:       # %bb.0:
371; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
372; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
373; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
374; CHECK-NEXT:    b.l.t (, %s10)
375  %5 = fcmp fast oeq fp128 %0, %1
376  %6 = select i1 %5, i8 %2, i8 %3
377  ret i8 %6
378}
379
380; Function Attrs: norecurse nounwind readnone
381define zeroext i8 @select_cc_i1_u8(i1 zeroext %0, i1 zeroext %1, i8 zeroext %2, i8 zeroext %3) {
382; CHECK-LABEL: select_cc_i1_u8:
383; CHECK:       # %bb.0:
384; CHECK-NEXT:    xor %s0, %s0, %s1
385; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
386; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
387; CHECK-NEXT:    b.l.t (, %s10)
388  %5 = xor i1 %0, %1
389  %6 = select i1 %5, i8 %3, i8 %2
390  ret i8 %6
391}
392
393; Function Attrs: norecurse nounwind readnone
394define zeroext i8 @select_cc_i8_u8(i8 signext %0, i8 signext %1, i8 zeroext %2, i8 zeroext %3) {
395; CHECK-LABEL: select_cc_i8_u8:
396; CHECK:       # %bb.0:
397; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
398; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
399; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
400; CHECK-NEXT:    b.l.t (, %s10)
401  %5 = icmp eq i8 %0, %1
402  %6 = select i1 %5, i8 %2, i8 %3
403  ret i8 %6
404}
405
406; Function Attrs: norecurse nounwind readnone
407define zeroext i8 @select_cc_u8_u8(i8 zeroext %0, i8 zeroext %1, i8 zeroext %2, i8 zeroext %3) {
408; CHECK-LABEL: select_cc_u8_u8:
409; CHECK:       # %bb.0:
410; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
411; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
412; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
413; CHECK-NEXT:    b.l.t (, %s10)
414  %5 = icmp eq i8 %0, %1
415  %6 = select i1 %5, i8 %2, i8 %3
416  ret i8 %6
417}
418
419; Function Attrs: norecurse nounwind readnone
420define zeroext i8 @select_cc_i16_u8(i16 signext %0, i16 signext %1, i8 zeroext %2, i8 zeroext %3) {
421; CHECK-LABEL: select_cc_i16_u8:
422; CHECK:       # %bb.0:
423; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
424; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
425; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
426; CHECK-NEXT:    b.l.t (, %s10)
427  %5 = icmp eq i16 %0, %1
428  %6 = select i1 %5, i8 %2, i8 %3
429  ret i8 %6
430}
431
432; Function Attrs: norecurse nounwind readnone
433define zeroext i8 @select_cc_u16_u8(i16 zeroext %0, i16 zeroext %1, i8 zeroext %2, i8 zeroext %3) {
434; CHECK-LABEL: select_cc_u16_u8:
435; CHECK:       # %bb.0:
436; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
437; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
438; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
439; CHECK-NEXT:    b.l.t (, %s10)
440  %5 = icmp eq i16 %0, %1
441  %6 = select i1 %5, i8 %2, i8 %3
442  ret i8 %6
443}
444
445; Function Attrs: norecurse nounwind readnone
446define zeroext i8 @select_cc_i32_u8(i32 signext %0, i32 signext %1, i8 zeroext %2, i8 zeroext %3) {
447; CHECK-LABEL: select_cc_i32_u8:
448; CHECK:       # %bb.0:
449; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
450; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
451; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
452; CHECK-NEXT:    b.l.t (, %s10)
453  %5 = icmp eq i32 %0, %1
454  %6 = select i1 %5, i8 %2, i8 %3
455  ret i8 %6
456}
457
458; Function Attrs: norecurse nounwind readnone
459define zeroext i8 @select_cc_u32_u8(i32 zeroext %0, i32 zeroext %1, i8 zeroext %2, i8 zeroext %3) {
460; CHECK-LABEL: select_cc_u32_u8:
461; CHECK:       # %bb.0:
462; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
463; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
464; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
465; CHECK-NEXT:    b.l.t (, %s10)
466  %5 = icmp eq i32 %0, %1
467  %6 = select i1 %5, i8 %2, i8 %3
468  ret i8 %6
469}
470
471; Function Attrs: norecurse nounwind readnone
472define zeroext i8 @select_cc_i64_u8(i64 %0, i64 %1, i8 zeroext %2, i8 zeroext %3) {
473; CHECK-LABEL: select_cc_i64_u8:
474; CHECK:       # %bb.0:
475; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
476; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
477; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
478; CHECK-NEXT:    b.l.t (, %s10)
479  %5 = icmp eq i64 %0, %1
480  %6 = select i1 %5, i8 %2, i8 %3
481  ret i8 %6
482}
483
484; Function Attrs: norecurse nounwind readnone
485define zeroext i8 @select_cc_u64_u8(i64 %0, i64 %1, i8 zeroext %2, i8 zeroext %3) {
486; CHECK-LABEL: select_cc_u64_u8:
487; CHECK:       # %bb.0:
488; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
489; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
490; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
491; CHECK-NEXT:    b.l.t (, %s10)
492  %5 = icmp eq i64 %0, %1
493  %6 = select i1 %5, i8 %2, i8 %3
494  ret i8 %6
495}
496
497; Function Attrs: norecurse nounwind readnone
498define zeroext i8 @select_cc_i128_u8(i128 %0, i128 %1, i8 zeroext %2, i8 zeroext %3) {
499; CHECK-LABEL: select_cc_i128_u8:
500; CHECK:       # %bb.0:
501; CHECK-NEXT:    xor %s1, %s1, %s3
502; CHECK-NEXT:    xor %s0, %s0, %s2
503; CHECK-NEXT:    or %s0, %s0, %s1
504; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
505; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
506; CHECK-NEXT:    b.l.t (, %s10)
507  %5 = icmp eq i128 %0, %1
508  %6 = select i1 %5, i8 %2, i8 %3
509  ret i8 %6
510}
511
512; Function Attrs: norecurse nounwind readnone
513define zeroext i8 @select_cc_u128_u8(i128 %0, i128 %1, i8 zeroext %2, i8 zeroext %3) {
514; CHECK-LABEL: select_cc_u128_u8:
515; CHECK:       # %bb.0:
516; CHECK-NEXT:    xor %s1, %s1, %s3
517; CHECK-NEXT:    xor %s0, %s0, %s2
518; CHECK-NEXT:    or %s0, %s0, %s1
519; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
520; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
521; CHECK-NEXT:    b.l.t (, %s10)
522  %5 = icmp eq i128 %0, %1
523  %6 = select i1 %5, i8 %2, i8 %3
524  ret i8 %6
525}
526
527; Function Attrs: norecurse nounwind readnone
528define zeroext i8 @select_cc_float_u8(float %0, float %1, i8 zeroext %2, i8 zeroext %3) {
529; CHECK-LABEL: select_cc_float_u8:
530; CHECK:       # %bb.0:
531; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
532; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
533; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
534; CHECK-NEXT:    b.l.t (, %s10)
535  %5 = fcmp fast oeq float %0, %1
536  %6 = select i1 %5, i8 %2, i8 %3
537  ret i8 %6
538}
539
540; Function Attrs: norecurse nounwind readnone
541define zeroext i8 @select_cc_double_u8(double %0, double %1, i8 zeroext %2, i8 zeroext %3) {
542; CHECK-LABEL: select_cc_double_u8:
543; CHECK:       # %bb.0:
544; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
545; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
546; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
547; CHECK-NEXT:    b.l.t (, %s10)
548  %5 = fcmp fast oeq double %0, %1
549  %6 = select i1 %5, i8 %2, i8 %3
550  ret i8 %6
551}
552
553; Function Attrs: norecurse nounwind readnone
554define zeroext i8 @select_cc_quad_u8(fp128 %0, fp128 %1, i8 zeroext %2, i8 zeroext %3) {
555; CHECK-LABEL: select_cc_quad_u8:
556; CHECK:       # %bb.0:
557; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
558; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
559; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
560; CHECK-NEXT:    b.l.t (, %s10)
561  %5 = fcmp fast oeq fp128 %0, %1
562  %6 = select i1 %5, i8 %2, i8 %3
563  ret i8 %6
564}
565
566; Function Attrs: norecurse nounwind readnone
567define signext i16 @select_cc_i1_i16(i1 zeroext %0, i1 zeroext %1, i16 signext %2, i16 signext %3) {
568; CHECK-LABEL: select_cc_i1_i16:
569; CHECK:       # %bb.0:
570; CHECK-NEXT:    xor %s0, %s0, %s1
571; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
572; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
573; CHECK-NEXT:    b.l.t (, %s10)
574  %5 = xor i1 %0, %1
575  %6 = select i1 %5, i16 %3, i16 %2
576  ret i16 %6
577}
578
579; Function Attrs: norecurse nounwind readnone
580define signext i16 @select_cc_i8_i16(i8 signext %0, i8 signext %1, i16 signext %2, i16 signext %3) {
581; CHECK-LABEL: select_cc_i8_i16:
582; CHECK:       # %bb.0:
583; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
584; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
585; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
586; CHECK-NEXT:    b.l.t (, %s10)
587  %5 = icmp eq i8 %0, %1
588  %6 = select i1 %5, i16 %2, i16 %3
589  ret i16 %6
590}
591
592; Function Attrs: norecurse nounwind readnone
593define signext i16 @select_cc_u8_i16(i8 zeroext %0, i8 zeroext %1, i16 signext %2, i16 signext %3) {
594; CHECK-LABEL: select_cc_u8_i16:
595; CHECK:       # %bb.0:
596; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
597; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
598; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
599; CHECK-NEXT:    b.l.t (, %s10)
600  %5 = icmp eq i8 %0, %1
601  %6 = select i1 %5, i16 %2, i16 %3
602  ret i16 %6
603}
604
605; Function Attrs: norecurse nounwind readnone
606define signext i16 @select_cc_i16_i16(i16 signext %0, i16 signext %1, i16 signext %2, i16 signext %3) {
607; CHECK-LABEL: select_cc_i16_i16:
608; CHECK:       # %bb.0:
609; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
610; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
611; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
612; CHECK-NEXT:    b.l.t (, %s10)
613  %5 = icmp eq i16 %0, %1
614  %6 = select i1 %5, i16 %2, i16 %3
615  ret i16 %6
616}
617
618; Function Attrs: norecurse nounwind readnone
619define signext i16 @select_cc_u16_i16(i16 zeroext %0, i16 zeroext %1, i16 signext %2, i16 signext %3) {
620; CHECK-LABEL: select_cc_u16_i16:
621; CHECK:       # %bb.0:
622; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
623; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
624; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
625; CHECK-NEXT:    b.l.t (, %s10)
626  %5 = icmp eq i16 %0, %1
627  %6 = select i1 %5, i16 %2, i16 %3
628  ret i16 %6
629}
630
631; Function Attrs: norecurse nounwind readnone
632define signext i16 @select_cc_i32_i16(i32 signext %0, i32 signext %1, i16 signext %2, i16 signext %3) {
633; CHECK-LABEL: select_cc_i32_i16:
634; CHECK:       # %bb.0:
635; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
636; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
637; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
638; CHECK-NEXT:    b.l.t (, %s10)
639  %5 = icmp eq i32 %0, %1
640  %6 = select i1 %5, i16 %2, i16 %3
641  ret i16 %6
642}
643
644; Function Attrs: norecurse nounwind readnone
645define signext i16 @select_cc_u32_i16(i32 zeroext %0, i32 zeroext %1, i16 signext %2, i16 signext %3) {
646; CHECK-LABEL: select_cc_u32_i16:
647; CHECK:       # %bb.0:
648; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
649; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
650; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
651; CHECK-NEXT:    b.l.t (, %s10)
652  %5 = icmp eq i32 %0, %1
653  %6 = select i1 %5, i16 %2, i16 %3
654  ret i16 %6
655}
656
657; Function Attrs: norecurse nounwind readnone
658define signext i16 @select_cc_i64_i16(i64 %0, i64 %1, i16 signext %2, i16 signext %3) {
659; CHECK-LABEL: select_cc_i64_i16:
660; CHECK:       # %bb.0:
661; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
662; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
663; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
664; CHECK-NEXT:    b.l.t (, %s10)
665  %5 = icmp eq i64 %0, %1
666  %6 = select i1 %5, i16 %2, i16 %3
667  ret i16 %6
668}
669
670; Function Attrs: norecurse nounwind readnone
671define signext i16 @select_cc_u64_i16(i64 %0, i64 %1, i16 signext %2, i16 signext %3) {
672; CHECK-LABEL: select_cc_u64_i16:
673; CHECK:       # %bb.0:
674; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
675; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
676; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
677; CHECK-NEXT:    b.l.t (, %s10)
678  %5 = icmp eq i64 %0, %1
679  %6 = select i1 %5, i16 %2, i16 %3
680  ret i16 %6
681}
682
683; Function Attrs: norecurse nounwind readnone
684define signext i16 @select_cc_i128_i16(i128 %0, i128 %1, i16 signext %2, i16 signext %3) {
685; CHECK-LABEL: select_cc_i128_i16:
686; CHECK:       # %bb.0:
687; CHECK-NEXT:    xor %s1, %s1, %s3
688; CHECK-NEXT:    xor %s0, %s0, %s2
689; CHECK-NEXT:    or %s0, %s0, %s1
690; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
691; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
692; CHECK-NEXT:    b.l.t (, %s10)
693  %5 = icmp eq i128 %0, %1
694  %6 = select i1 %5, i16 %2, i16 %3
695  ret i16 %6
696}
697
698; Function Attrs: norecurse nounwind readnone
699define signext i16 @select_cc_u128_i16(i128 %0, i128 %1, i16 signext %2, i16 signext %3) {
700; CHECK-LABEL: select_cc_u128_i16:
701; CHECK:       # %bb.0:
702; CHECK-NEXT:    xor %s1, %s1, %s3
703; CHECK-NEXT:    xor %s0, %s0, %s2
704; CHECK-NEXT:    or %s0, %s0, %s1
705; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
706; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
707; CHECK-NEXT:    b.l.t (, %s10)
708  %5 = icmp eq i128 %0, %1
709  %6 = select i1 %5, i16 %2, i16 %3
710  ret i16 %6
711}
712
713; Function Attrs: norecurse nounwind readnone
714define signext i16 @select_cc_float_i16(float %0, float %1, i16 signext %2, i16 signext %3) {
715; CHECK-LABEL: select_cc_float_i16:
716; CHECK:       # %bb.0:
717; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
718; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
719; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
720; CHECK-NEXT:    b.l.t (, %s10)
721  %5 = fcmp fast oeq float %0, %1
722  %6 = select i1 %5, i16 %2, i16 %3
723  ret i16 %6
724}
725
726; Function Attrs: norecurse nounwind readnone
727define signext i16 @select_cc_double_i16(double %0, double %1, i16 signext %2, i16 signext %3) {
728; CHECK-LABEL: select_cc_double_i16:
729; CHECK:       # %bb.0:
730; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
731; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
732; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
733; CHECK-NEXT:    b.l.t (, %s10)
734  %5 = fcmp fast oeq double %0, %1
735  %6 = select i1 %5, i16 %2, i16 %3
736  ret i16 %6
737}
738
739; Function Attrs: norecurse nounwind readnone
740define signext i16 @select_cc_quad_i16(fp128 %0, fp128 %1, i16 signext %2, i16 signext %3) {
741; CHECK-LABEL: select_cc_quad_i16:
742; CHECK:       # %bb.0:
743; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
744; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
745; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
746; CHECK-NEXT:    b.l.t (, %s10)
747  %5 = fcmp fast oeq fp128 %0, %1
748  %6 = select i1 %5, i16 %2, i16 %3
749  ret i16 %6
750}
751
752; Function Attrs: norecurse nounwind readnone
753define zeroext i16 @select_cc_i1_u16(i1 zeroext %0, i1 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
754; CHECK-LABEL: select_cc_i1_u16:
755; CHECK:       # %bb.0:
756; CHECK-NEXT:    xor %s0, %s0, %s1
757; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
758; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
759; CHECK-NEXT:    b.l.t (, %s10)
760  %5 = xor i1 %0, %1
761  %6 = select i1 %5, i16 %3, i16 %2
762  ret i16 %6
763}
764
765; Function Attrs: norecurse nounwind readnone
766define zeroext i16 @select_cc_i8_u16(i8 signext %0, i8 signext %1, i16 zeroext %2, i16 zeroext %3) {
767; CHECK-LABEL: select_cc_i8_u16:
768; CHECK:       # %bb.0:
769; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
770; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
771; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
772; CHECK-NEXT:    b.l.t (, %s10)
773  %5 = icmp eq i8 %0, %1
774  %6 = select i1 %5, i16 %2, i16 %3
775  ret i16 %6
776}
777
778; Function Attrs: norecurse nounwind readnone
779define zeroext i16 @select_cc_u8_u16(i8 zeroext %0, i8 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
780; CHECK-LABEL: select_cc_u8_u16:
781; CHECK:       # %bb.0:
782; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
783; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
784; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
785; CHECK-NEXT:    b.l.t (, %s10)
786  %5 = icmp eq i8 %0, %1
787  %6 = select i1 %5, i16 %2, i16 %3
788  ret i16 %6
789}
790
791; Function Attrs: norecurse nounwind readnone
792define zeroext i16 @select_cc_i16_u16(i16 signext %0, i16 signext %1, i16 zeroext %2, i16 zeroext %3) {
793; CHECK-LABEL: select_cc_i16_u16:
794; CHECK:       # %bb.0:
795; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
796; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
797; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
798; CHECK-NEXT:    b.l.t (, %s10)
799  %5 = icmp eq i16 %0, %1
800  %6 = select i1 %5, i16 %2, i16 %3
801  ret i16 %6
802}
803
804; Function Attrs: norecurse nounwind readnone
805define zeroext i16 @select_cc_u16_u16(i16 zeroext %0, i16 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
806; CHECK-LABEL: select_cc_u16_u16:
807; CHECK:       # %bb.0:
808; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
809; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
810; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
811; CHECK-NEXT:    b.l.t (, %s10)
812  %5 = icmp eq i16 %0, %1
813  %6 = select i1 %5, i16 %2, i16 %3
814  ret i16 %6
815}
816
817; Function Attrs: norecurse nounwind readnone
818define zeroext i16 @select_cc_i32_u16(i32 signext %0, i32 signext %1, i16 zeroext %2, i16 zeroext %3) {
819; CHECK-LABEL: select_cc_i32_u16:
820; CHECK:       # %bb.0:
821; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
822; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
823; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
824; CHECK-NEXT:    b.l.t (, %s10)
825  %5 = icmp eq i32 %0, %1
826  %6 = select i1 %5, i16 %2, i16 %3
827  ret i16 %6
828}
829
830; Function Attrs: norecurse nounwind readnone
831define zeroext i16 @select_cc_u32_u16(i32 zeroext %0, i32 zeroext %1, i16 zeroext %2, i16 zeroext %3) {
832; CHECK-LABEL: select_cc_u32_u16:
833; CHECK:       # %bb.0:
834; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
835; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
836; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
837; CHECK-NEXT:    b.l.t (, %s10)
838  %5 = icmp eq i32 %0, %1
839  %6 = select i1 %5, i16 %2, i16 %3
840  ret i16 %6
841}
842
843; Function Attrs: norecurse nounwind readnone
844define zeroext i16 @select_cc_i64_u16(i64 %0, i64 %1, i16 zeroext %2, i16 zeroext %3) {
845; CHECK-LABEL: select_cc_i64_u16:
846; CHECK:       # %bb.0:
847; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
848; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
849; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
850; CHECK-NEXT:    b.l.t (, %s10)
851  %5 = icmp eq i64 %0, %1
852  %6 = select i1 %5, i16 %2, i16 %3
853  ret i16 %6
854}
855
856; Function Attrs: norecurse nounwind readnone
857define zeroext i16 @select_cc_u64_u16(i64 %0, i64 %1, i16 zeroext %2, i16 zeroext %3) {
858; CHECK-LABEL: select_cc_u64_u16:
859; CHECK:       # %bb.0:
860; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
861; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
862; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
863; CHECK-NEXT:    b.l.t (, %s10)
864  %5 = icmp eq i64 %0, %1
865  %6 = select i1 %5, i16 %2, i16 %3
866  ret i16 %6
867}
868
869; Function Attrs: norecurse nounwind readnone
870define zeroext i16 @select_cc_i128_u16(i128 %0, i128 %1, i16 zeroext %2, i16 zeroext %3) {
871; CHECK-LABEL: select_cc_i128_u16:
872; CHECK:       # %bb.0:
873; CHECK-NEXT:    xor %s1, %s1, %s3
874; CHECK-NEXT:    xor %s0, %s0, %s2
875; CHECK-NEXT:    or %s0, %s0, %s1
876; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
877; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
878; CHECK-NEXT:    b.l.t (, %s10)
879  %5 = icmp eq i128 %0, %1
880  %6 = select i1 %5, i16 %2, i16 %3
881  ret i16 %6
882}
883
884; Function Attrs: norecurse nounwind readnone
885define zeroext i16 @select_cc_u128_u16(i128 %0, i128 %1, i16 zeroext %2, i16 zeroext %3) {
886; CHECK-LABEL: select_cc_u128_u16:
887; CHECK:       # %bb.0:
888; CHECK-NEXT:    xor %s1, %s1, %s3
889; CHECK-NEXT:    xor %s0, %s0, %s2
890; CHECK-NEXT:    or %s0, %s0, %s1
891; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
892; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
893; CHECK-NEXT:    b.l.t (, %s10)
894  %5 = icmp eq i128 %0, %1
895  %6 = select i1 %5, i16 %2, i16 %3
896  ret i16 %6
897}
898
899; Function Attrs: norecurse nounwind readnone
900define zeroext i16 @select_cc_float_u16(float %0, float %1, i16 zeroext %2, i16 zeroext %3) {
901; CHECK-LABEL: select_cc_float_u16:
902; CHECK:       # %bb.0:
903; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
904; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
905; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
906; CHECK-NEXT:    b.l.t (, %s10)
907  %5 = fcmp fast oeq float %0, %1
908  %6 = select i1 %5, i16 %2, i16 %3
909  ret i16 %6
910}
911
912; Function Attrs: norecurse nounwind readnone
913define zeroext i16 @select_cc_double_u16(double %0, double %1, i16 zeroext %2, i16 zeroext %3) {
914; CHECK-LABEL: select_cc_double_u16:
915; CHECK:       # %bb.0:
916; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
917; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
918; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
919; CHECK-NEXT:    b.l.t (, %s10)
920  %5 = fcmp fast oeq double %0, %1
921  %6 = select i1 %5, i16 %2, i16 %3
922  ret i16 %6
923}
924
925; Function Attrs: norecurse nounwind readnone
926define zeroext i16 @select_cc_quad_u16(fp128 %0, fp128 %1, i16 zeroext %2, i16 zeroext %3) {
927; CHECK-LABEL: select_cc_quad_u16:
928; CHECK:       # %bb.0:
929; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
930; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
931; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
932; CHECK-NEXT:    b.l.t (, %s10)
933  %5 = fcmp fast oeq fp128 %0, %1
934  %6 = select i1 %5, i16 %2, i16 %3
935  ret i16 %6
936}
937
938; Function Attrs: norecurse nounwind readnone
939define signext i32 @select_cc_i1_i32(i1 zeroext %0, i1 zeroext %1, i32 signext %2, i32 signext %3) {
940; CHECK-LABEL: select_cc_i1_i32:
941; CHECK:       # %bb.0:
942; CHECK-NEXT:    xor %s0, %s0, %s1
943; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
944; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
945; CHECK-NEXT:    b.l.t (, %s10)
946  %5 = xor i1 %0, %1
947  %6 = select i1 %5, i32 %3, i32 %2
948  ret i32 %6
949}
950
951; Function Attrs: norecurse nounwind readnone
952define signext i32 @select_cc_i8_i32(i8 signext %0, i8 signext %1, i32 signext %2, i32 signext %3) {
953; CHECK-LABEL: select_cc_i8_i32:
954; CHECK:       # %bb.0:
955; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
956; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
957; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
958; CHECK-NEXT:    b.l.t (, %s10)
959  %5 = icmp eq i8 %0, %1
960  %6 = select i1 %5, i32 %2, i32 %3
961  ret i32 %6
962}
963
964; Function Attrs: norecurse nounwind readnone
965define signext i32 @select_cc_u8_i32(i8 zeroext %0, i8 zeroext %1, i32 signext %2, i32 signext %3) {
966; CHECK-LABEL: select_cc_u8_i32:
967; CHECK:       # %bb.0:
968; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
969; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
970; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
971; CHECK-NEXT:    b.l.t (, %s10)
972  %5 = icmp eq i8 %0, %1
973  %6 = select i1 %5, i32 %2, i32 %3
974  ret i32 %6
975}
976
977; Function Attrs: norecurse nounwind readnone
978define signext i32 @select_cc_i16_i32(i16 signext %0, i16 signext %1, i32 signext %2, i32 signext %3) {
979; CHECK-LABEL: select_cc_i16_i32:
980; CHECK:       # %bb.0:
981; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
982; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
983; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
984; CHECK-NEXT:    b.l.t (, %s10)
985  %5 = icmp eq i16 %0, %1
986  %6 = select i1 %5, i32 %2, i32 %3
987  ret i32 %6
988}
989
990; Function Attrs: norecurse nounwind readnone
991define signext i32 @select_cc_u16_i32(i16 zeroext %0, i16 zeroext %1, i32 signext %2, i32 signext %3) {
992; CHECK-LABEL: select_cc_u16_i32:
993; CHECK:       # %bb.0:
994; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
995; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
996; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
997; CHECK-NEXT:    b.l.t (, %s10)
998  %5 = icmp eq i16 %0, %1
999  %6 = select i1 %5, i32 %2, i32 %3
1000  ret i32 %6
1001}
1002
1003; Function Attrs: norecurse nounwind readnone
1004define signext i32 @select_cc_i32_i32(i32 signext %0, i32 signext %1, i32 signext %2, i32 signext %3) {
1005; CHECK-LABEL: select_cc_i32_i32:
1006; CHECK:       # %bb.0:
1007; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1008; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1009; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1010; CHECK-NEXT:    b.l.t (, %s10)
1011  %5 = icmp eq i32 %0, %1
1012  %6 = select i1 %5, i32 %2, i32 %3
1013  ret i32 %6
1014}
1015
1016; Function Attrs: norecurse nounwind readnone
1017define signext i32 @select_cc_u32_i32(i32 zeroext %0, i32 zeroext %1, i32 signext %2, i32 signext %3) {
1018; CHECK-LABEL: select_cc_u32_i32:
1019; CHECK:       # %bb.0:
1020; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1021; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1022; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1023; CHECK-NEXT:    b.l.t (, %s10)
1024  %5 = icmp eq i32 %0, %1
1025  %6 = select i1 %5, i32 %2, i32 %3
1026  ret i32 %6
1027}
1028
1029; Function Attrs: norecurse nounwind readnone
1030define signext i32 @select_cc_i64_i32(i64 %0, i64 %1, i32 signext %2, i32 signext %3) {
1031; CHECK-LABEL: select_cc_i64_i32:
1032; CHECK:       # %bb.0:
1033; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1034; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1035; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1036; CHECK-NEXT:    b.l.t (, %s10)
1037  %5 = icmp eq i64 %0, %1
1038  %6 = select i1 %5, i32 %2, i32 %3
1039  ret i32 %6
1040}
1041
1042; Function Attrs: norecurse nounwind readnone
1043define signext i32 @select_cc_u64_i32(i64 %0, i64 %1, i32 signext %2, i32 signext %3) {
1044; CHECK-LABEL: select_cc_u64_i32:
1045; CHECK:       # %bb.0:
1046; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1047; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1048; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1049; CHECK-NEXT:    b.l.t (, %s10)
1050  %5 = icmp eq i64 %0, %1
1051  %6 = select i1 %5, i32 %2, i32 %3
1052  ret i32 %6
1053}
1054
1055; Function Attrs: norecurse nounwind readnone
1056define signext i32 @select_cc_i128_i32(i128 %0, i128 %1, i32 signext %2, i32 signext %3) {
1057; CHECK-LABEL: select_cc_i128_i32:
1058; CHECK:       # %bb.0:
1059; CHECK-NEXT:    xor %s1, %s1, %s3
1060; CHECK-NEXT:    xor %s0, %s0, %s2
1061; CHECK-NEXT:    or %s0, %s0, %s1
1062; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1063; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
1064; CHECK-NEXT:    b.l.t (, %s10)
1065  %5 = icmp eq i128 %0, %1
1066  %6 = select i1 %5, i32 %2, i32 %3
1067  ret i32 %6
1068}
1069
1070; Function Attrs: norecurse nounwind readnone
1071define signext i32 @select_cc_u128_i32(i128 %0, i128 %1, i32 signext %2, i32 signext %3) {
1072; CHECK-LABEL: select_cc_u128_i32:
1073; CHECK:       # %bb.0:
1074; CHECK-NEXT:    xor %s1, %s1, %s3
1075; CHECK-NEXT:    xor %s0, %s0, %s2
1076; CHECK-NEXT:    or %s0, %s0, %s1
1077; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1078; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
1079; CHECK-NEXT:    b.l.t (, %s10)
1080  %5 = icmp eq i128 %0, %1
1081  %6 = select i1 %5, i32 %2, i32 %3
1082  ret i32 %6
1083}
1084
1085; Function Attrs: norecurse nounwind readnone
1086define signext i32 @select_cc_float_i32(float %0, float %1, i32 signext %2, i32 signext %3) {
1087; CHECK-LABEL: select_cc_float_i32:
1088; CHECK:       # %bb.0:
1089; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
1090; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
1091; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1092; CHECK-NEXT:    b.l.t (, %s10)
1093  %5 = fcmp fast oeq float %0, %1
1094  %6 = select i1 %5, i32 %2, i32 %3
1095  ret i32 %6
1096}
1097
1098; Function Attrs: norecurse nounwind readnone
1099define signext i32 @select_cc_double_i32(double %0, double %1, i32 signext %2, i32 signext %3) {
1100; CHECK-LABEL: select_cc_double_i32:
1101; CHECK:       # %bb.0:
1102; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
1103; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
1104; CHECK-NEXT:    adds.w.sx %s0, %s3, (0)1
1105; CHECK-NEXT:    b.l.t (, %s10)
1106  %5 = fcmp fast oeq double %0, %1
1107  %6 = select i1 %5, i32 %2, i32 %3
1108  ret i32 %6
1109}
1110
1111; Function Attrs: norecurse nounwind readnone
1112define signext i32 @select_cc_quad_i32(fp128 %0, fp128 %1, i32 signext %2, i32 signext %3) {
1113; CHECK-LABEL: select_cc_quad_i32:
1114; CHECK:       # %bb.0:
1115; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
1116; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
1117; CHECK-NEXT:    adds.w.sx %s0, %s5, (0)1
1118; CHECK-NEXT:    b.l.t (, %s10)
1119  %5 = fcmp fast oeq fp128 %0, %1
1120  %6 = select i1 %5, i32 %2, i32 %3
1121  ret i32 %6
1122}
1123
1124; Function Attrs: norecurse nounwind readnone
1125define zeroext i32 @select_cc_i1_u32(i1 zeroext %0, i1 zeroext %1, i32 zeroext %2, i32 zeroext %3) {
1126; CHECK-LABEL: select_cc_i1_u32:
1127; CHECK:       # %bb.0:
1128; CHECK-NEXT:    xor %s0, %s0, %s1
1129; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
1130; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
1131; CHECK-NEXT:    b.l.t (, %s10)
1132  %5 = xor i1 %0, %1
1133  %6 = select i1 %5, i32 %3, i32 %2
1134  ret i32 %6
1135}
1136
1137; Function Attrs: norecurse nounwind readnone
1138define zeroext i32 @select_cc_i8_u32(i8 signext %0, i8 signext %1, i32 zeroext %2, i32 zeroext %3) {
1139; CHECK-LABEL: select_cc_i8_u32:
1140; CHECK:       # %bb.0:
1141; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1142; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1143; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1144; CHECK-NEXT:    b.l.t (, %s10)
1145  %5 = icmp eq i8 %0, %1
1146  %6 = select i1 %5, i32 %2, i32 %3
1147  ret i32 %6
1148}
1149
1150; Function Attrs: norecurse nounwind readnone
1151define zeroext i32 @select_cc_u8_u32(i8 zeroext %0, i8 zeroext %1, i32 zeroext %2, i32 zeroext %3) {
1152; CHECK-LABEL: select_cc_u8_u32:
1153; CHECK:       # %bb.0:
1154; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1155; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1156; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1157; CHECK-NEXT:    b.l.t (, %s10)
1158  %5 = icmp eq i8 %0, %1
1159  %6 = select i1 %5, i32 %2, i32 %3
1160  ret i32 %6
1161}
1162
1163; Function Attrs: norecurse nounwind readnone
1164define zeroext i32 @select_cc_i16_u32(i16 signext %0, i16 signext %1, i32 zeroext %2, i32 zeroext %3) {
1165; CHECK-LABEL: select_cc_i16_u32:
1166; CHECK:       # %bb.0:
1167; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1168; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1169; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1170; CHECK-NEXT:    b.l.t (, %s10)
1171  %5 = icmp eq i16 %0, %1
1172  %6 = select i1 %5, i32 %2, i32 %3
1173  ret i32 %6
1174}
1175
1176; Function Attrs: norecurse nounwind readnone
1177define zeroext i32 @select_cc_u16_u32(i16 zeroext %0, i16 zeroext %1, i32 zeroext %2, i32 zeroext %3) {
1178; CHECK-LABEL: select_cc_u16_u32:
1179; CHECK:       # %bb.0:
1180; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1181; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1182; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1183; CHECK-NEXT:    b.l.t (, %s10)
1184  %5 = icmp eq i16 %0, %1
1185  %6 = select i1 %5, i32 %2, i32 %3
1186  ret i32 %6
1187}
1188
1189; Function Attrs: norecurse nounwind readnone
1190define zeroext i32 @select_cc_i32_u32(i32 signext %0, i32 signext %1, i32 zeroext %2, i32 zeroext %3) {
1191; CHECK-LABEL: select_cc_i32_u32:
1192; CHECK:       # %bb.0:
1193; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1194; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1195; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1196; CHECK-NEXT:    b.l.t (, %s10)
1197  %5 = icmp eq i32 %0, %1
1198  %6 = select i1 %5, i32 %2, i32 %3
1199  ret i32 %6
1200}
1201
1202; Function Attrs: norecurse nounwind readnone
1203define zeroext i32 @select_cc_u32_u32(i32 zeroext %0, i32 zeroext %1, i32 zeroext %2, i32 zeroext %3) {
1204; CHECK-LABEL: select_cc_u32_u32:
1205; CHECK:       # %bb.0:
1206; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1207; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1208; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1209; CHECK-NEXT:    b.l.t (, %s10)
1210  %5 = icmp eq i32 %0, %1
1211  %6 = select i1 %5, i32 %2, i32 %3
1212  ret i32 %6
1213}
1214
1215; Function Attrs: norecurse nounwind readnone
1216define zeroext i32 @select_cc_i64_u32(i64 %0, i64 %1, i32 zeroext %2, i32 zeroext %3) {
1217; CHECK-LABEL: select_cc_i64_u32:
1218; CHECK:       # %bb.0:
1219; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1220; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1221; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1222; CHECK-NEXT:    b.l.t (, %s10)
1223  %5 = icmp eq i64 %0, %1
1224  %6 = select i1 %5, i32 %2, i32 %3
1225  ret i32 %6
1226}
1227
1228; Function Attrs: norecurse nounwind readnone
1229define zeroext i32 @select_cc_u64_u32(i64 %0, i64 %1, i32 zeroext %2, i32 zeroext %3) {
1230; CHECK-LABEL: select_cc_u64_u32:
1231; CHECK:       # %bb.0:
1232; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1233; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1234; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1235; CHECK-NEXT:    b.l.t (, %s10)
1236  %5 = icmp eq i64 %0, %1
1237  %6 = select i1 %5, i32 %2, i32 %3
1238  ret i32 %6
1239}
1240
1241; Function Attrs: norecurse nounwind readnone
1242define zeroext i32 @select_cc_i128_u32(i128 %0, i128 %1, i32 zeroext %2, i32 zeroext %3) {
1243; CHECK-LABEL: select_cc_i128_u32:
1244; CHECK:       # %bb.0:
1245; CHECK-NEXT:    xor %s1, %s1, %s3
1246; CHECK-NEXT:    xor %s0, %s0, %s2
1247; CHECK-NEXT:    or %s0, %s0, %s1
1248; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1249; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
1250; CHECK-NEXT:    b.l.t (, %s10)
1251  %5 = icmp eq i128 %0, %1
1252  %6 = select i1 %5, i32 %2, i32 %3
1253  ret i32 %6
1254}
1255
1256; Function Attrs: norecurse nounwind readnone
1257define zeroext i32 @select_cc_u128_u32(i128 %0, i128 %1, i32 zeroext %2, i32 zeroext %3) {
1258; CHECK-LABEL: select_cc_u128_u32:
1259; CHECK:       # %bb.0:
1260; CHECK-NEXT:    xor %s1, %s1, %s3
1261; CHECK-NEXT:    xor %s0, %s0, %s2
1262; CHECK-NEXT:    or %s0, %s0, %s1
1263; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1264; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
1265; CHECK-NEXT:    b.l.t (, %s10)
1266  %5 = icmp eq i128 %0, %1
1267  %6 = select i1 %5, i32 %2, i32 %3
1268  ret i32 %6
1269}
1270
1271; Function Attrs: norecurse nounwind readnone
1272define zeroext i32 @select_cc_float_u32(float %0, float %1, i32 zeroext %2, i32 zeroext %3) {
1273; CHECK-LABEL: select_cc_float_u32:
1274; CHECK:       # %bb.0:
1275; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
1276; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
1277; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1278; CHECK-NEXT:    b.l.t (, %s10)
1279  %5 = fcmp fast oeq float %0, %1
1280  %6 = select i1 %5, i32 %2, i32 %3
1281  ret i32 %6
1282}
1283
1284; Function Attrs: norecurse nounwind readnone
1285define zeroext i32 @select_cc_double_u32(double %0, double %1, i32 zeroext %2, i32 zeroext %3) {
1286; CHECK-LABEL: select_cc_double_u32:
1287; CHECK:       # %bb.0:
1288; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
1289; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
1290; CHECK-NEXT:    adds.w.zx %s0, %s3, (0)1
1291; CHECK-NEXT:    b.l.t (, %s10)
1292  %5 = fcmp fast oeq double %0, %1
1293  %6 = select i1 %5, i32 %2, i32 %3
1294  ret i32 %6
1295}
1296
1297; Function Attrs: norecurse nounwind readnone
1298define zeroext i32 @select_cc_quad_u32(fp128 %0, fp128 %1, i32 zeroext %2, i32 zeroext %3) {
1299; CHECK-LABEL: select_cc_quad_u32:
1300; CHECK:       # %bb.0:
1301; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
1302; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
1303; CHECK-NEXT:    adds.w.zx %s0, %s5, (0)1
1304; CHECK-NEXT:    b.l.t (, %s10)
1305  %5 = fcmp fast oeq fp128 %0, %1
1306  %6 = select i1 %5, i32 %2, i32 %3
1307  ret i32 %6
1308}
1309
1310; Function Attrs: norecurse nounwind readnone
1311define i64 @select_cc_i1_i64(i1 zeroext %0, i1 zeroext %1, i64 %2, i64 %3) {
1312; CHECK-LABEL: select_cc_i1_i64:
1313; CHECK:       # %bb.0:
1314; CHECK-NEXT:    xor %s0, %s0, %s1
1315; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
1316; CHECK-NEXT:    or %s0, 0, %s2
1317; CHECK-NEXT:    b.l.t (, %s10)
1318  %5 = xor i1 %0, %1
1319  %6 = select i1 %5, i64 %3, i64 %2
1320  ret i64 %6
1321}
1322
1323; Function Attrs: norecurse nounwind readnone
1324define i64 @select_cc_i8_i64(i8 signext %0, i8 signext %1, i64 %2, i64 %3) {
1325; CHECK-LABEL: select_cc_i8_i64:
1326; CHECK:       # %bb.0:
1327; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1328; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1329; CHECK-NEXT:    or %s0, 0, %s3
1330; CHECK-NEXT:    b.l.t (, %s10)
1331  %5 = icmp eq i8 %0, %1
1332  %6 = select i1 %5, i64 %2, i64 %3
1333  ret i64 %6
1334}
1335
1336; Function Attrs: norecurse nounwind readnone
1337define i64 @select_cc_u8_i64(i8 zeroext %0, i8 zeroext %1, i64 %2, i64 %3) {
1338; CHECK-LABEL: select_cc_u8_i64:
1339; CHECK:       # %bb.0:
1340; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1341; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1342; CHECK-NEXT:    or %s0, 0, %s3
1343; CHECK-NEXT:    b.l.t (, %s10)
1344  %5 = icmp eq i8 %0, %1
1345  %6 = select i1 %5, i64 %2, i64 %3
1346  ret i64 %6
1347}
1348
1349; Function Attrs: norecurse nounwind readnone
1350define i64 @select_cc_i16_i64(i16 signext %0, i16 signext %1, i64 %2, i64 %3) {
1351; CHECK-LABEL: select_cc_i16_i64:
1352; CHECK:       # %bb.0:
1353; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1354; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1355; CHECK-NEXT:    or %s0, 0, %s3
1356; CHECK-NEXT:    b.l.t (, %s10)
1357  %5 = icmp eq i16 %0, %1
1358  %6 = select i1 %5, i64 %2, i64 %3
1359  ret i64 %6
1360}
1361
1362; Function Attrs: norecurse nounwind readnone
1363define i64 @select_cc_u16_i64(i16 zeroext %0, i16 zeroext %1, i64 %2, i64 %3) {
1364; CHECK-LABEL: select_cc_u16_i64:
1365; CHECK:       # %bb.0:
1366; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1367; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1368; CHECK-NEXT:    or %s0, 0, %s3
1369; CHECK-NEXT:    b.l.t (, %s10)
1370  %5 = icmp eq i16 %0, %1
1371  %6 = select i1 %5, i64 %2, i64 %3
1372  ret i64 %6
1373}
1374
1375; Function Attrs: norecurse nounwind readnone
1376define i64 @select_cc_i32_i64(i32 signext %0, i32 signext %1, i64 %2, i64 %3) {
1377; CHECK-LABEL: select_cc_i32_i64:
1378; CHECK:       # %bb.0:
1379; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1380; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1381; CHECK-NEXT:    or %s0, 0, %s3
1382; CHECK-NEXT:    b.l.t (, %s10)
1383  %5 = icmp eq i32 %0, %1
1384  %6 = select i1 %5, i64 %2, i64 %3
1385  ret i64 %6
1386}
1387
1388; Function Attrs: norecurse nounwind readnone
1389define i64 @select_cc_u32_i64(i32 zeroext %0, i32 zeroext %1, i64 %2, i64 %3) {
1390; CHECK-LABEL: select_cc_u32_i64:
1391; CHECK:       # %bb.0:
1392; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1393; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1394; CHECK-NEXT:    or %s0, 0, %s3
1395; CHECK-NEXT:    b.l.t (, %s10)
1396  %5 = icmp eq i32 %0, %1
1397  %6 = select i1 %5, i64 %2, i64 %3
1398  ret i64 %6
1399}
1400
1401; Function Attrs: norecurse nounwind readnone
1402define i64 @select_cc_i64_i64(i64 %0, i64 %1, i64 %2, i64 %3) {
1403; CHECK-LABEL: select_cc_i64_i64:
1404; CHECK:       # %bb.0:
1405; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1406; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1407; CHECK-NEXT:    or %s0, 0, %s3
1408; CHECK-NEXT:    b.l.t (, %s10)
1409  %5 = icmp eq i64 %0, %1
1410  %6 = select i1 %5, i64 %2, i64 %3
1411  ret i64 %6
1412}
1413
1414; Function Attrs: norecurse nounwind readnone
1415define i64 @select_cc_u64_i64(i64 %0, i64 %1, i64 %2, i64 %3) {
1416; CHECK-LABEL: select_cc_u64_i64:
1417; CHECK:       # %bb.0:
1418; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1419; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1420; CHECK-NEXT:    or %s0, 0, %s3
1421; CHECK-NEXT:    b.l.t (, %s10)
1422  %5 = icmp eq i64 %0, %1
1423  %6 = select i1 %5, i64 %2, i64 %3
1424  ret i64 %6
1425}
1426
1427; Function Attrs: norecurse nounwind readnone
1428define i64 @select_cc_i128_i64(i128 %0, i128 %1, i64 %2, i64 %3) {
1429; CHECK-LABEL: select_cc_i128_i64:
1430; CHECK:       # %bb.0:
1431; CHECK-NEXT:    xor %s1, %s1, %s3
1432; CHECK-NEXT:    xor %s0, %s0, %s2
1433; CHECK-NEXT:    or %s0, %s0, %s1
1434; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1435; CHECK-NEXT:    or %s0, 0, %s5
1436; CHECK-NEXT:    b.l.t (, %s10)
1437  %5 = icmp eq i128 %0, %1
1438  %6 = select i1 %5, i64 %2, i64 %3
1439  ret i64 %6
1440}
1441
1442; Function Attrs: norecurse nounwind readnone
1443define i64 @select_cc_u128_i64(i128 %0, i128 %1, i64 %2, i64 %3) {
1444; CHECK-LABEL: select_cc_u128_i64:
1445; CHECK:       # %bb.0:
1446; CHECK-NEXT:    xor %s1, %s1, %s3
1447; CHECK-NEXT:    xor %s0, %s0, %s2
1448; CHECK-NEXT:    or %s0, %s0, %s1
1449; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1450; CHECK-NEXT:    or %s0, 0, %s5
1451; CHECK-NEXT:    b.l.t (, %s10)
1452  %5 = icmp eq i128 %0, %1
1453  %6 = select i1 %5, i64 %2, i64 %3
1454  ret i64 %6
1455}
1456
1457; Function Attrs: norecurse nounwind readnone
1458define i64 @select_cc_float_i64(float %0, float %1, i64 %2, i64 %3) {
1459; CHECK-LABEL: select_cc_float_i64:
1460; CHECK:       # %bb.0:
1461; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
1462; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
1463; CHECK-NEXT:    or %s0, 0, %s3
1464; CHECK-NEXT:    b.l.t (, %s10)
1465  %5 = fcmp fast oeq float %0, %1
1466  %6 = select i1 %5, i64 %2, i64 %3
1467  ret i64 %6
1468}
1469
1470; Function Attrs: norecurse nounwind readnone
1471define i64 @select_cc_double_i64(double %0, double %1, i64 %2, i64 %3) {
1472; CHECK-LABEL: select_cc_double_i64:
1473; CHECK:       # %bb.0:
1474; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
1475; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
1476; CHECK-NEXT:    or %s0, 0, %s3
1477; CHECK-NEXT:    b.l.t (, %s10)
1478  %5 = fcmp fast oeq double %0, %1
1479  %6 = select i1 %5, i64 %2, i64 %3
1480  ret i64 %6
1481}
1482
1483; Function Attrs: norecurse nounwind readnone
1484define i64 @select_cc_quad_i64(fp128 %0, fp128 %1, i64 %2, i64 %3) {
1485; CHECK-LABEL: select_cc_quad_i64:
1486; CHECK:       # %bb.0:
1487; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
1488; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
1489; CHECK-NEXT:    or %s0, 0, %s5
1490; CHECK-NEXT:    b.l.t (, %s10)
1491  %5 = fcmp fast oeq fp128 %0, %1
1492  %6 = select i1 %5, i64 %2, i64 %3
1493  ret i64 %6
1494}
1495
1496; Function Attrs: norecurse nounwind readnone
1497define i64 @select_cc_i1_u64(i1 zeroext %0, i1 zeroext %1, i64 %2, i64 %3) {
1498; CHECK-LABEL: select_cc_i1_u64:
1499; CHECK:       # %bb.0:
1500; CHECK-NEXT:    xor %s0, %s0, %s1
1501; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
1502; CHECK-NEXT:    or %s0, 0, %s2
1503; CHECK-NEXT:    b.l.t (, %s10)
1504  %5 = xor i1 %0, %1
1505  %6 = select i1 %5, i64 %3, i64 %2
1506  ret i64 %6
1507}
1508
1509; Function Attrs: norecurse nounwind readnone
1510define i64 @select_cc_i8_u64(i8 signext %0, i8 signext %1, i64 %2, i64 %3) {
1511; CHECK-LABEL: select_cc_i8_u64:
1512; CHECK:       # %bb.0:
1513; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1514; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1515; CHECK-NEXT:    or %s0, 0, %s3
1516; CHECK-NEXT:    b.l.t (, %s10)
1517  %5 = icmp eq i8 %0, %1
1518  %6 = select i1 %5, i64 %2, i64 %3
1519  ret i64 %6
1520}
1521
1522; Function Attrs: norecurse nounwind readnone
1523define i64 @select_cc_u8_u64(i8 zeroext %0, i8 zeroext %1, i64 %2, i64 %3) {
1524; CHECK-LABEL: select_cc_u8_u64:
1525; CHECK:       # %bb.0:
1526; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1527; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1528; CHECK-NEXT:    or %s0, 0, %s3
1529; CHECK-NEXT:    b.l.t (, %s10)
1530  %5 = icmp eq i8 %0, %1
1531  %6 = select i1 %5, i64 %2, i64 %3
1532  ret i64 %6
1533}
1534
1535; Function Attrs: norecurse nounwind readnone
1536define i64 @select_cc_i16_u64(i16 signext %0, i16 signext %1, i64 %2, i64 %3) {
1537; CHECK-LABEL: select_cc_i16_u64:
1538; CHECK:       # %bb.0:
1539; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1540; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1541; CHECK-NEXT:    or %s0, 0, %s3
1542; CHECK-NEXT:    b.l.t (, %s10)
1543  %5 = icmp eq i16 %0, %1
1544  %6 = select i1 %5, i64 %2, i64 %3
1545  ret i64 %6
1546}
1547
1548; Function Attrs: norecurse nounwind readnone
1549define i64 @select_cc_u16_u64(i16 zeroext %0, i16 zeroext %1, i64 %2, i64 %3) {
1550; CHECK-LABEL: select_cc_u16_u64:
1551; CHECK:       # %bb.0:
1552; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1553; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1554; CHECK-NEXT:    or %s0, 0, %s3
1555; CHECK-NEXT:    b.l.t (, %s10)
1556  %5 = icmp eq i16 %0, %1
1557  %6 = select i1 %5, i64 %2, i64 %3
1558  ret i64 %6
1559}
1560
1561; Function Attrs: norecurse nounwind readnone
1562define i64 @select_cc_i32_u64(i32 signext %0, i32 signext %1, i64 %2, i64 %3) {
1563; CHECK-LABEL: select_cc_i32_u64:
1564; CHECK:       # %bb.0:
1565; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1566; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1567; CHECK-NEXT:    or %s0, 0, %s3
1568; CHECK-NEXT:    b.l.t (, %s10)
1569  %5 = icmp eq i32 %0, %1
1570  %6 = select i1 %5, i64 %2, i64 %3
1571  ret i64 %6
1572}
1573
1574; Function Attrs: norecurse nounwind readnone
1575define i64 @select_cc_u32_u64(i32 zeroext %0, i32 zeroext %1, i64 %2, i64 %3) {
1576; CHECK-LABEL: select_cc_u32_u64:
1577; CHECK:       # %bb.0:
1578; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1579; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
1580; CHECK-NEXT:    or %s0, 0, %s3
1581; CHECK-NEXT:    b.l.t (, %s10)
1582  %5 = icmp eq i32 %0, %1
1583  %6 = select i1 %5, i64 %2, i64 %3
1584  ret i64 %6
1585}
1586
1587; Function Attrs: norecurse nounwind readnone
1588define i64 @select_cc_i64_u64(i64 %0, i64 %1, i64 %2, i64 %3) {
1589; CHECK-LABEL: select_cc_i64_u64:
1590; CHECK:       # %bb.0:
1591; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1592; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1593; CHECK-NEXT:    or %s0, 0, %s3
1594; CHECK-NEXT:    b.l.t (, %s10)
1595  %5 = icmp eq i64 %0, %1
1596  %6 = select i1 %5, i64 %2, i64 %3
1597  ret i64 %6
1598}
1599
1600; Function Attrs: norecurse nounwind readnone
1601define i64 @select_cc_u64_u64(i64 %0, i64 %1, i64 %2, i64 %3) {
1602; CHECK-LABEL: select_cc_u64_u64:
1603; CHECK:       # %bb.0:
1604; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1605; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
1606; CHECK-NEXT:    or %s0, 0, %s3
1607; CHECK-NEXT:    b.l.t (, %s10)
1608  %5 = icmp eq i64 %0, %1
1609  %6 = select i1 %5, i64 %2, i64 %3
1610  ret i64 %6
1611}
1612
1613; Function Attrs: norecurse nounwind readnone
1614define i64 @select_cc_i128_u64(i128 %0, i128 %1, i64 %2, i64 %3) {
1615; CHECK-LABEL: select_cc_i128_u64:
1616; CHECK:       # %bb.0:
1617; CHECK-NEXT:    xor %s1, %s1, %s3
1618; CHECK-NEXT:    xor %s0, %s0, %s2
1619; CHECK-NEXT:    or %s0, %s0, %s1
1620; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1621; CHECK-NEXT:    or %s0, 0, %s5
1622; CHECK-NEXT:    b.l.t (, %s10)
1623  %5 = icmp eq i128 %0, %1
1624  %6 = select i1 %5, i64 %2, i64 %3
1625  ret i64 %6
1626}
1627
1628; Function Attrs: norecurse nounwind readnone
1629define i64 @select_cc_u128_u64(i128 %0, i128 %1, i64 %2, i64 %3) {
1630; CHECK-LABEL: select_cc_u128_u64:
1631; CHECK:       # %bb.0:
1632; CHECK-NEXT:    xor %s1, %s1, %s3
1633; CHECK-NEXT:    xor %s0, %s0, %s2
1634; CHECK-NEXT:    or %s0, %s0, %s1
1635; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
1636; CHECK-NEXT:    or %s0, 0, %s5
1637; CHECK-NEXT:    b.l.t (, %s10)
1638  %5 = icmp eq i128 %0, %1
1639  %6 = select i1 %5, i64 %2, i64 %3
1640  ret i64 %6
1641}
1642
1643; Function Attrs: norecurse nounwind readnone
1644define i64 @select_cc_float_u64(float %0, float %1, i64 %2, i64 %3) {
1645; CHECK-LABEL: select_cc_float_u64:
1646; CHECK:       # %bb.0:
1647; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
1648; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
1649; CHECK-NEXT:    or %s0, 0, %s3
1650; CHECK-NEXT:    b.l.t (, %s10)
1651  %5 = fcmp fast oeq float %0, %1
1652  %6 = select i1 %5, i64 %2, i64 %3
1653  ret i64 %6
1654}
1655
1656; Function Attrs: norecurse nounwind readnone
1657define i64 @select_cc_double_u64(double %0, double %1, i64 %2, i64 %3) {
1658; CHECK-LABEL: select_cc_double_u64:
1659; CHECK:       # %bb.0:
1660; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
1661; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
1662; CHECK-NEXT:    or %s0, 0, %s3
1663; CHECK-NEXT:    b.l.t (, %s10)
1664  %5 = fcmp fast oeq double %0, %1
1665  %6 = select i1 %5, i64 %2, i64 %3
1666  ret i64 %6
1667}
1668
1669; Function Attrs: norecurse nounwind readnone
1670define i64 @select_cc_quad_u64(fp128 %0, fp128 %1, i64 %2, i64 %3) {
1671; CHECK-LABEL: select_cc_quad_u64:
1672; CHECK:       # %bb.0:
1673; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
1674; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
1675; CHECK-NEXT:    or %s0, 0, %s5
1676; CHECK-NEXT:    b.l.t (, %s10)
1677  %5 = fcmp fast oeq fp128 %0, %1
1678  %6 = select i1 %5, i64 %2, i64 %3
1679  ret i64 %6
1680}
1681
1682; Function Attrs: norecurse nounwind readnone
1683define i128 @select_cc_i1_i128(i1 zeroext %0, i1 zeroext %1, i128 %2, i128 %3) {
1684; CHECK-LABEL: select_cc_i1_i128:
1685; CHECK:       # %bb.0:
1686; CHECK-NEXT:    xor %s0, %s0, %s1
1687; CHECK-NEXT:    cmov.w.ne %s2, %s4, %s0
1688; CHECK-NEXT:    cmov.w.ne %s3, %s5, %s0
1689; CHECK-NEXT:    or %s0, 0, %s2
1690; CHECK-NEXT:    or %s1, 0, %s3
1691; CHECK-NEXT:    b.l.t (, %s10)
1692  %5 = xor i1 %0, %1
1693  %6 = select i1 %5, i128 %3, i128 %2
1694  ret i128 %6
1695}
1696
1697; Function Attrs: norecurse nounwind readnone
1698define i128 @select_cc_i8_i128(i8 signext %0, i8 signext %1, i128 %2, i128 %3) {
1699; CHECK-LABEL: select_cc_i8_i128:
1700; CHECK:       # %bb.0:
1701; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1702; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1703; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1704; CHECK-NEXT:    or %s0, 0, %s4
1705; CHECK-NEXT:    or %s1, 0, %s5
1706; CHECK-NEXT:    b.l.t (, %s10)
1707  %5 = icmp eq i8 %0, %1
1708  %6 = select i1 %5, i128 %2, i128 %3
1709  ret i128 %6
1710}
1711
1712; Function Attrs: norecurse nounwind readnone
1713define i128 @select_cc_u8_i128(i8 zeroext %0, i8 zeroext %1, i128 %2, i128 %3) {
1714; CHECK-LABEL: select_cc_u8_i128:
1715; CHECK:       # %bb.0:
1716; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1717; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1718; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1719; CHECK-NEXT:    or %s0, 0, %s4
1720; CHECK-NEXT:    or %s1, 0, %s5
1721; CHECK-NEXT:    b.l.t (, %s10)
1722  %5 = icmp eq i8 %0, %1
1723  %6 = select i1 %5, i128 %2, i128 %3
1724  ret i128 %6
1725}
1726
1727; Function Attrs: norecurse nounwind readnone
1728define i128 @select_cc_i16_i128(i16 signext %0, i16 signext %1, i128 %2, i128 %3) {
1729; CHECK-LABEL: select_cc_i16_i128:
1730; CHECK:       # %bb.0:
1731; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1732; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1733; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1734; CHECK-NEXT:    or %s0, 0, %s4
1735; CHECK-NEXT:    or %s1, 0, %s5
1736; CHECK-NEXT:    b.l.t (, %s10)
1737  %5 = icmp eq i16 %0, %1
1738  %6 = select i1 %5, i128 %2, i128 %3
1739  ret i128 %6
1740}
1741
1742; Function Attrs: norecurse nounwind readnone
1743define i128 @select_cc_u16_i128(i16 zeroext %0, i16 zeroext %1, i128 %2, i128 %3) {
1744; CHECK-LABEL: select_cc_u16_i128:
1745; CHECK:       # %bb.0:
1746; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1747; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1748; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1749; CHECK-NEXT:    or %s0, 0, %s4
1750; CHECK-NEXT:    or %s1, 0, %s5
1751; CHECK-NEXT:    b.l.t (, %s10)
1752  %5 = icmp eq i16 %0, %1
1753  %6 = select i1 %5, i128 %2, i128 %3
1754  ret i128 %6
1755}
1756
1757; Function Attrs: norecurse nounwind readnone
1758define i128 @select_cc_i32_i128(i32 signext %0, i32 signext %1, i128 %2, i128 %3) {
1759; CHECK-LABEL: select_cc_i32_i128:
1760; CHECK:       # %bb.0:
1761; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1762; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1763; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1764; CHECK-NEXT:    or %s0, 0, %s4
1765; CHECK-NEXT:    or %s1, 0, %s5
1766; CHECK-NEXT:    b.l.t (, %s10)
1767  %5 = icmp eq i32 %0, %1
1768  %6 = select i1 %5, i128 %2, i128 %3
1769  ret i128 %6
1770}
1771
1772; Function Attrs: norecurse nounwind readnone
1773define i128 @select_cc_u32_i128(i32 zeroext %0, i32 zeroext %1, i128 %2, i128 %3) {
1774; CHECK-LABEL: select_cc_u32_i128:
1775; CHECK:       # %bb.0:
1776; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1777; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1778; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1779; CHECK-NEXT:    or %s0, 0, %s4
1780; CHECK-NEXT:    or %s1, 0, %s5
1781; CHECK-NEXT:    b.l.t (, %s10)
1782  %5 = icmp eq i32 %0, %1
1783  %6 = select i1 %5, i128 %2, i128 %3
1784  ret i128 %6
1785}
1786
1787; Function Attrs: norecurse nounwind readnone
1788define i128 @select_cc_i64_i128(i64 %0, i64 %1, i128 %2, i128 %3) {
1789; CHECK-LABEL: select_cc_i64_i128:
1790; CHECK:       # %bb.0:
1791; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1792; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
1793; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
1794; CHECK-NEXT:    or %s0, 0, %s4
1795; CHECK-NEXT:    or %s1, 0, %s5
1796; CHECK-NEXT:    b.l.t (, %s10)
1797  %5 = icmp eq i64 %0, %1
1798  %6 = select i1 %5, i128 %2, i128 %3
1799  ret i128 %6
1800}
1801
1802; Function Attrs: norecurse nounwind readnone
1803define i128 @select_cc_u64_i128(i64 %0, i64 %1, i128 %2, i128 %3) {
1804; CHECK-LABEL: select_cc_u64_i128:
1805; CHECK:       # %bb.0:
1806; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
1807; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
1808; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
1809; CHECK-NEXT:    or %s0, 0, %s4
1810; CHECK-NEXT:    or %s1, 0, %s5
1811; CHECK-NEXT:    b.l.t (, %s10)
1812  %5 = icmp eq i64 %0, %1
1813  %6 = select i1 %5, i128 %2, i128 %3
1814  ret i128 %6
1815}
1816
1817; Function Attrs: norecurse nounwind readnone
1818define i128 @select_cc_i128_i128(i128 %0, i128 %1, i128 %2, i128 %3) {
1819; CHECK-LABEL: select_cc_i128_i128:
1820; CHECK:       # %bb.0:
1821; CHECK-NEXT:    xor %s1, %s1, %s3
1822; CHECK-NEXT:    xor %s0, %s0, %s2
1823; CHECK-NEXT:    or %s0, %s0, %s1
1824; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
1825; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
1826; CHECK-NEXT:    or %s0, 0, %s6
1827; CHECK-NEXT:    or %s1, 0, %s7
1828; CHECK-NEXT:    b.l.t (, %s10)
1829  %5 = icmp eq i128 %0, %1
1830  %6 = select i1 %5, i128 %2, i128 %3
1831  ret i128 %6
1832}
1833
1834; Function Attrs: norecurse nounwind readnone
1835define i128 @select_cc_u128_i128(i128 %0, i128 %1, i128 %2, i128 %3) {
1836; CHECK-LABEL: select_cc_u128_i128:
1837; CHECK:       # %bb.0:
1838; CHECK-NEXT:    xor %s1, %s1, %s3
1839; CHECK-NEXT:    xor %s0, %s0, %s2
1840; CHECK-NEXT:    or %s0, %s0, %s1
1841; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
1842; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
1843; CHECK-NEXT:    or %s0, 0, %s6
1844; CHECK-NEXT:    or %s1, 0, %s7
1845; CHECK-NEXT:    b.l.t (, %s10)
1846  %5 = icmp eq i128 %0, %1
1847  %6 = select i1 %5, i128 %2, i128 %3
1848  ret i128 %6
1849}
1850
1851; Function Attrs: norecurse nounwind readnone
1852define i128 @select_cc_float_i128(float %0, float %1, i128 %2, i128 %3) {
1853; CHECK-LABEL: select_cc_float_i128:
1854; CHECK:       # %bb.0:
1855; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
1856; CHECK-NEXT:    cmov.s.eq %s4, %s2, %s0
1857; CHECK-NEXT:    cmov.s.eq %s5, %s3, %s0
1858; CHECK-NEXT:    or %s0, 0, %s4
1859; CHECK-NEXT:    or %s1, 0, %s5
1860; CHECK-NEXT:    b.l.t (, %s10)
1861  %5 = fcmp fast oeq float %0, %1
1862  %6 = select i1 %5, i128 %2, i128 %3
1863  ret i128 %6
1864}
1865
1866; Function Attrs: norecurse nounwind readnone
1867define i128 @select_cc_double_i128(double %0, double %1, i128 %2, i128 %3) {
1868; CHECK-LABEL: select_cc_double_i128:
1869; CHECK:       # %bb.0:
1870; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
1871; CHECK-NEXT:    cmov.d.eq %s4, %s2, %s0
1872; CHECK-NEXT:    cmov.d.eq %s5, %s3, %s0
1873; CHECK-NEXT:    or %s0, 0, %s4
1874; CHECK-NEXT:    or %s1, 0, %s5
1875; CHECK-NEXT:    b.l.t (, %s10)
1876  %5 = fcmp fast oeq double %0, %1
1877  %6 = select i1 %5, i128 %2, i128 %3
1878  ret i128 %6
1879}
1880
1881; Function Attrs: norecurse nounwind readnone
1882define i128 @select_cc_quad_i128(fp128 %0, fp128 %1, i128 %2, i128 %3) {
1883; CHECK-LABEL: select_cc_quad_i128:
1884; CHECK:       # %bb.0:
1885; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
1886; CHECK-NEXT:    cmov.d.eq %s6, %s4, %s0
1887; CHECK-NEXT:    cmov.d.eq %s7, %s5, %s0
1888; CHECK-NEXT:    or %s0, 0, %s6
1889; CHECK-NEXT:    or %s1, 0, %s7
1890; CHECK-NEXT:    b.l.t (, %s10)
1891  %5 = fcmp fast oeq fp128 %0, %1
1892  %6 = select i1 %5, i128 %2, i128 %3
1893  ret i128 %6
1894}
1895
1896; Function Attrs: norecurse nounwind readnone
1897define i128 @select_cc_i1_u128(i1 zeroext %0, i1 zeroext %1, i128 %2, i128 %3) {
1898; CHECK-LABEL: select_cc_i1_u128:
1899; CHECK:       # %bb.0:
1900; CHECK-NEXT:    xor %s0, %s0, %s1
1901; CHECK-NEXT:    cmov.w.ne %s2, %s4, %s0
1902; CHECK-NEXT:    cmov.w.ne %s3, %s5, %s0
1903; CHECK-NEXT:    or %s0, 0, %s2
1904; CHECK-NEXT:    or %s1, 0, %s3
1905; CHECK-NEXT:    b.l.t (, %s10)
1906  %5 = xor i1 %0, %1
1907  %6 = select i1 %5, i128 %3, i128 %2
1908  ret i128 %6
1909}
1910
1911; Function Attrs: norecurse nounwind readnone
1912define i128 @select_cc_i8_u128(i8 signext %0, i8 signext %1, i128 %2, i128 %3) {
1913; CHECK-LABEL: select_cc_i8_u128:
1914; CHECK:       # %bb.0:
1915; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1916; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1917; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1918; CHECK-NEXT:    or %s0, 0, %s4
1919; CHECK-NEXT:    or %s1, 0, %s5
1920; CHECK-NEXT:    b.l.t (, %s10)
1921  %5 = icmp eq i8 %0, %1
1922  %6 = select i1 %5, i128 %2, i128 %3
1923  ret i128 %6
1924}
1925
1926; Function Attrs: norecurse nounwind readnone
1927define i128 @select_cc_u8_u128(i8 zeroext %0, i8 zeroext %1, i128 %2, i128 %3) {
1928; CHECK-LABEL: select_cc_u8_u128:
1929; CHECK:       # %bb.0:
1930; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1931; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1932; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1933; CHECK-NEXT:    or %s0, 0, %s4
1934; CHECK-NEXT:    or %s1, 0, %s5
1935; CHECK-NEXT:    b.l.t (, %s10)
1936  %5 = icmp eq i8 %0, %1
1937  %6 = select i1 %5, i128 %2, i128 %3
1938  ret i128 %6
1939}
1940
1941; Function Attrs: norecurse nounwind readnone
1942define i128 @select_cc_i16_u128(i16 signext %0, i16 signext %1, i128 %2, i128 %3) {
1943; CHECK-LABEL: select_cc_i16_u128:
1944; CHECK:       # %bb.0:
1945; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1946; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1947; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1948; CHECK-NEXT:    or %s0, 0, %s4
1949; CHECK-NEXT:    or %s1, 0, %s5
1950; CHECK-NEXT:    b.l.t (, %s10)
1951  %5 = icmp eq i16 %0, %1
1952  %6 = select i1 %5, i128 %2, i128 %3
1953  ret i128 %6
1954}
1955
1956; Function Attrs: norecurse nounwind readnone
1957define i128 @select_cc_u16_u128(i16 zeroext %0, i16 zeroext %1, i128 %2, i128 %3) {
1958; CHECK-LABEL: select_cc_u16_u128:
1959; CHECK:       # %bb.0:
1960; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1961; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1962; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1963; CHECK-NEXT:    or %s0, 0, %s4
1964; CHECK-NEXT:    or %s1, 0, %s5
1965; CHECK-NEXT:    b.l.t (, %s10)
1966  %5 = icmp eq i16 %0, %1
1967  %6 = select i1 %5, i128 %2, i128 %3
1968  ret i128 %6
1969}
1970
1971; Function Attrs: norecurse nounwind readnone
1972define i128 @select_cc_i32_u128(i32 signext %0, i32 signext %1, i128 %2, i128 %3) {
1973; CHECK-LABEL: select_cc_i32_u128:
1974; CHECK:       # %bb.0:
1975; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1976; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1977; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1978; CHECK-NEXT:    or %s0, 0, %s4
1979; CHECK-NEXT:    or %s1, 0, %s5
1980; CHECK-NEXT:    b.l.t (, %s10)
1981  %5 = icmp eq i32 %0, %1
1982  %6 = select i1 %5, i128 %2, i128 %3
1983  ret i128 %6
1984}
1985
1986; Function Attrs: norecurse nounwind readnone
1987define i128 @select_cc_u32_u128(i32 zeroext %0, i32 zeroext %1, i128 %2, i128 %3) {
1988; CHECK-LABEL: select_cc_u32_u128:
1989; CHECK:       # %bb.0:
1990; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
1991; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
1992; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
1993; CHECK-NEXT:    or %s0, 0, %s4
1994; CHECK-NEXT:    or %s1, 0, %s5
1995; CHECK-NEXT:    b.l.t (, %s10)
1996  %5 = icmp eq i32 %0, %1
1997  %6 = select i1 %5, i128 %2, i128 %3
1998  ret i128 %6
1999}
2000
2001; Function Attrs: norecurse nounwind readnone
2002define i128 @select_cc_i64_u128(i64 %0, i64 %1, i128 %2, i128 %3) {
2003; CHECK-LABEL: select_cc_i64_u128:
2004; CHECK:       # %bb.0:
2005; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2006; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
2007; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
2008; CHECK-NEXT:    or %s0, 0, %s4
2009; CHECK-NEXT:    or %s1, 0, %s5
2010; CHECK-NEXT:    b.l.t (, %s10)
2011  %5 = icmp eq i64 %0, %1
2012  %6 = select i1 %5, i128 %2, i128 %3
2013  ret i128 %6
2014}
2015
2016; Function Attrs: norecurse nounwind readnone
2017define i128 @select_cc_u64_u128(i64 %0, i64 %1, i128 %2, i128 %3) {
2018; CHECK-LABEL: select_cc_u64_u128:
2019; CHECK:       # %bb.0:
2020; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2021; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
2022; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
2023; CHECK-NEXT:    or %s0, 0, %s4
2024; CHECK-NEXT:    or %s1, 0, %s5
2025; CHECK-NEXT:    b.l.t (, %s10)
2026  %5 = icmp eq i64 %0, %1
2027  %6 = select i1 %5, i128 %2, i128 %3
2028  ret i128 %6
2029}
2030
2031; Function Attrs: norecurse nounwind readnone
2032define i128 @select_cc_i128_u128(i128 %0, i128 %1, i128 %2, i128 %3) {
2033; CHECK-LABEL: select_cc_i128_u128:
2034; CHECK:       # %bb.0:
2035; CHECK-NEXT:    xor %s1, %s1, %s3
2036; CHECK-NEXT:    xor %s0, %s0, %s2
2037; CHECK-NEXT:    or %s0, %s0, %s1
2038; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
2039; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
2040; CHECK-NEXT:    or %s0, 0, %s6
2041; CHECK-NEXT:    or %s1, 0, %s7
2042; CHECK-NEXT:    b.l.t (, %s10)
2043  %5 = icmp eq i128 %0, %1
2044  %6 = select i1 %5, i128 %2, i128 %3
2045  ret i128 %6
2046}
2047
2048; Function Attrs: norecurse nounwind readnone
2049define i128 @select_cc_u128_u128(i128 %0, i128 %1, i128 %2, i128 %3) {
2050; CHECK-LABEL: select_cc_u128_u128:
2051; CHECK:       # %bb.0:
2052; CHECK-NEXT:    xor %s1, %s1, %s3
2053; CHECK-NEXT:    xor %s0, %s0, %s2
2054; CHECK-NEXT:    or %s0, %s0, %s1
2055; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
2056; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
2057; CHECK-NEXT:    or %s0, 0, %s6
2058; CHECK-NEXT:    or %s1, 0, %s7
2059; CHECK-NEXT:    b.l.t (, %s10)
2060  %5 = icmp eq i128 %0, %1
2061  %6 = select i1 %5, i128 %2, i128 %3
2062  ret i128 %6
2063}
2064
2065; Function Attrs: norecurse nounwind readnone
2066define i128 @select_cc_float_u128(float %0, float %1, i128 %2, i128 %3) {
2067; CHECK-LABEL: select_cc_float_u128:
2068; CHECK:       # %bb.0:
2069; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
2070; CHECK-NEXT:    cmov.s.eq %s4, %s2, %s0
2071; CHECK-NEXT:    cmov.s.eq %s5, %s3, %s0
2072; CHECK-NEXT:    or %s0, 0, %s4
2073; CHECK-NEXT:    or %s1, 0, %s5
2074; CHECK-NEXT:    b.l.t (, %s10)
2075  %5 = fcmp fast oeq float %0, %1
2076  %6 = select i1 %5, i128 %2, i128 %3
2077  ret i128 %6
2078}
2079
2080; Function Attrs: norecurse nounwind readnone
2081define i128 @select_cc_double_u128(double %0, double %1, i128 %2, i128 %3) {
2082; CHECK-LABEL: select_cc_double_u128:
2083; CHECK:       # %bb.0:
2084; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
2085; CHECK-NEXT:    cmov.d.eq %s4, %s2, %s0
2086; CHECK-NEXT:    cmov.d.eq %s5, %s3, %s0
2087; CHECK-NEXT:    or %s0, 0, %s4
2088; CHECK-NEXT:    or %s1, 0, %s5
2089; CHECK-NEXT:    b.l.t (, %s10)
2090  %5 = fcmp fast oeq double %0, %1
2091  %6 = select i1 %5, i128 %2, i128 %3
2092  ret i128 %6
2093}
2094
2095; Function Attrs: norecurse nounwind readnone
2096define i128 @select_cc_quad_u128(fp128 %0, fp128 %1, i128 %2, i128 %3) {
2097; CHECK-LABEL: select_cc_quad_u128:
2098; CHECK:       # %bb.0:
2099; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
2100; CHECK-NEXT:    cmov.d.eq %s6, %s4, %s0
2101; CHECK-NEXT:    cmov.d.eq %s7, %s5, %s0
2102; CHECK-NEXT:    or %s0, 0, %s6
2103; CHECK-NEXT:    or %s1, 0, %s7
2104; CHECK-NEXT:    b.l.t (, %s10)
2105  %5 = fcmp fast oeq fp128 %0, %1
2106  %6 = select i1 %5, i128 %2, i128 %3
2107  ret i128 %6
2108}
2109
2110; Function Attrs: norecurse nounwind readnone
2111define float @select_cc_i1_float(i1 zeroext %0, i1 zeroext %1, float %2, float %3) {
2112; CHECK-LABEL: select_cc_i1_float:
2113; CHECK:       # %bb.0:
2114; CHECK-NEXT:    xor %s0, %s0, %s1
2115; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
2116; CHECK-NEXT:    or %s0, 0, %s2
2117; CHECK-NEXT:    b.l.t (, %s10)
2118  %5 = xor i1 %0, %1
2119  %6 = select fast i1 %5, float %3, float %2
2120  ret float %6
2121}
2122
2123; Function Attrs: norecurse nounwind readnone
2124define float @select_cc_i8_float(i8 signext %0, i8 signext %1, float %2, float %3) {
2125; CHECK-LABEL: select_cc_i8_float:
2126; CHECK:       # %bb.0:
2127; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2128; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2129; CHECK-NEXT:    or %s0, 0, %s3
2130; CHECK-NEXT:    b.l.t (, %s10)
2131  %5 = icmp eq i8 %0, %1
2132  %6 = select fast i1 %5, float %2, float %3
2133  ret float %6
2134}
2135
2136; Function Attrs: norecurse nounwind readnone
2137define float @select_cc_u8_float(i8 zeroext %0, i8 zeroext %1, float %2, float %3) {
2138; CHECK-LABEL: select_cc_u8_float:
2139; CHECK:       # %bb.0:
2140; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2141; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2142; CHECK-NEXT:    or %s0, 0, %s3
2143; CHECK-NEXT:    b.l.t (, %s10)
2144  %5 = icmp eq i8 %0, %1
2145  %6 = select fast i1 %5, float %2, float %3
2146  ret float %6
2147}
2148
2149; Function Attrs: norecurse nounwind readnone
2150define float @select_cc_i16_float(i16 signext %0, i16 signext %1, float %2, float %3) {
2151; CHECK-LABEL: select_cc_i16_float:
2152; CHECK:       # %bb.0:
2153; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2154; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2155; CHECK-NEXT:    or %s0, 0, %s3
2156; CHECK-NEXT:    b.l.t (, %s10)
2157  %5 = icmp eq i16 %0, %1
2158  %6 = select fast i1 %5, float %2, float %3
2159  ret float %6
2160}
2161
2162; Function Attrs: norecurse nounwind readnone
2163define float @select_cc_u16_float(i16 zeroext %0, i16 zeroext %1, float %2, float %3) {
2164; CHECK-LABEL: select_cc_u16_float:
2165; CHECK:       # %bb.0:
2166; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2167; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2168; CHECK-NEXT:    or %s0, 0, %s3
2169; CHECK-NEXT:    b.l.t (, %s10)
2170  %5 = icmp eq i16 %0, %1
2171  %6 = select fast i1 %5, float %2, float %3
2172  ret float %6
2173}
2174
2175; Function Attrs: norecurse nounwind readnone
2176define float @select_cc_i32_float(i32 signext %0, i32 signext %1, float %2, float %3) {
2177; CHECK-LABEL: select_cc_i32_float:
2178; CHECK:       # %bb.0:
2179; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2180; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2181; CHECK-NEXT:    or %s0, 0, %s3
2182; CHECK-NEXT:    b.l.t (, %s10)
2183  %5 = icmp eq i32 %0, %1
2184  %6 = select fast i1 %5, float %2, float %3
2185  ret float %6
2186}
2187
2188; Function Attrs: norecurse nounwind readnone
2189define float @select_cc_u32_float(i32 zeroext %0, i32 zeroext %1, float %2, float %3) {
2190; CHECK-LABEL: select_cc_u32_float:
2191; CHECK:       # %bb.0:
2192; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2193; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2194; CHECK-NEXT:    or %s0, 0, %s3
2195; CHECK-NEXT:    b.l.t (, %s10)
2196  %5 = icmp eq i32 %0, %1
2197  %6 = select fast i1 %5, float %2, float %3
2198  ret float %6
2199}
2200
2201; Function Attrs: norecurse nounwind readnone
2202define float @select_cc_i64_float(i64 %0, i64 %1, float %2, float %3) {
2203; CHECK-LABEL: select_cc_i64_float:
2204; CHECK:       # %bb.0:
2205; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2206; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
2207; CHECK-NEXT:    or %s0, 0, %s3
2208; CHECK-NEXT:    b.l.t (, %s10)
2209  %5 = icmp eq i64 %0, %1
2210  %6 = select fast i1 %5, float %2, float %3
2211  ret float %6
2212}
2213
2214; Function Attrs: norecurse nounwind readnone
2215define float @select_cc_u64_float(i64 %0, i64 %1, float %2, float %3) {
2216; CHECK-LABEL: select_cc_u64_float:
2217; CHECK:       # %bb.0:
2218; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2219; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
2220; CHECK-NEXT:    or %s0, 0, %s3
2221; CHECK-NEXT:    b.l.t (, %s10)
2222  %5 = icmp eq i64 %0, %1
2223  %6 = select fast i1 %5, float %2, float %3
2224  ret float %6
2225}
2226
2227; Function Attrs: norecurse nounwind readnone
2228define float @select_cc_i128_float(i128 %0, i128 %1, float %2, float %3) {
2229; CHECK-LABEL: select_cc_i128_float:
2230; CHECK:       # %bb.0:
2231; CHECK-NEXT:    xor %s1, %s1, %s3
2232; CHECK-NEXT:    xor %s0, %s0, %s2
2233; CHECK-NEXT:    or %s0, %s0, %s1
2234; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
2235; CHECK-NEXT:    or %s0, 0, %s5
2236; CHECK-NEXT:    b.l.t (, %s10)
2237  %5 = icmp eq i128 %0, %1
2238  %6 = select fast i1 %5, float %2, float %3
2239  ret float %6
2240}
2241
2242; Function Attrs: norecurse nounwind readnone
2243define float @select_cc_u128_float(i128 %0, i128 %1, float %2, float %3) {
2244; CHECK-LABEL: select_cc_u128_float:
2245; CHECK:       # %bb.0:
2246; CHECK-NEXT:    xor %s1, %s1, %s3
2247; CHECK-NEXT:    xor %s0, %s0, %s2
2248; CHECK-NEXT:    or %s0, %s0, %s1
2249; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
2250; CHECK-NEXT:    or %s0, 0, %s5
2251; CHECK-NEXT:    b.l.t (, %s10)
2252  %5 = icmp eq i128 %0, %1
2253  %6 = select fast i1 %5, float %2, float %3
2254  ret float %6
2255}
2256
2257; Function Attrs: norecurse nounwind readnone
2258define float @select_cc_float_float(float %0, float %1, float %2, float %3) {
2259; CHECK-LABEL: select_cc_float_float:
2260; CHECK:       # %bb.0:
2261; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
2262; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
2263; CHECK-NEXT:    or %s0, 0, %s3
2264; CHECK-NEXT:    b.l.t (, %s10)
2265  %5 = fcmp fast oeq float %0, %1
2266  %6 = select fast i1 %5, float %2, float %3
2267  ret float %6
2268}
2269
2270; Function Attrs: norecurse nounwind readnone
2271define float @select_cc_double_float(double %0, double %1, float %2, float %3) {
2272; CHECK-LABEL: select_cc_double_float:
2273; CHECK:       # %bb.0:
2274; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
2275; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
2276; CHECK-NEXT:    or %s0, 0, %s3
2277; CHECK-NEXT:    b.l.t (, %s10)
2278  %5 = fcmp fast oeq double %0, %1
2279  %6 = select fast i1 %5, float %2, float %3
2280  ret float %6
2281}
2282
2283; Function Attrs: norecurse nounwind readnone
2284define float @select_cc_quad_float(fp128 %0, fp128 %1, float %2, float %3) {
2285; CHECK-LABEL: select_cc_quad_float:
2286; CHECK:       # %bb.0:
2287; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
2288; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
2289; CHECK-NEXT:    or %s0, 0, %s5
2290; CHECK-NEXT:    b.l.t (, %s10)
2291  %5 = fcmp fast oeq fp128 %0, %1
2292  %6 = select fast i1 %5, float %2, float %3
2293  ret float %6
2294}
2295
2296; Function Attrs: norecurse nounwind readnone
2297define double @select_cc_i1_double(i1 zeroext %0, i1 zeroext %1, double %2, double %3) {
2298; CHECK-LABEL: select_cc_i1_double:
2299; CHECK:       # %bb.0:
2300; CHECK-NEXT:    xor %s0, %s0, %s1
2301; CHECK-NEXT:    cmov.w.ne %s2, %s3, %s0
2302; CHECK-NEXT:    or %s0, 0, %s2
2303; CHECK-NEXT:    b.l.t (, %s10)
2304  %5 = xor i1 %0, %1
2305  %6 = select fast i1 %5, double %3, double %2
2306  ret double %6
2307}
2308
2309; Function Attrs: norecurse nounwind readnone
2310define double @select_cc_i8_double(i8 signext %0, i8 signext %1, double %2, double %3) {
2311; CHECK-LABEL: select_cc_i8_double:
2312; CHECK:       # %bb.0:
2313; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2314; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2315; CHECK-NEXT:    or %s0, 0, %s3
2316; CHECK-NEXT:    b.l.t (, %s10)
2317  %5 = icmp eq i8 %0, %1
2318  %6 = select fast i1 %5, double %2, double %3
2319  ret double %6
2320}
2321
2322; Function Attrs: norecurse nounwind readnone
2323define double @select_cc_u8_double(i8 zeroext %0, i8 zeroext %1, double %2, double %3) {
2324; CHECK-LABEL: select_cc_u8_double:
2325; CHECK:       # %bb.0:
2326; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2327; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2328; CHECK-NEXT:    or %s0, 0, %s3
2329; CHECK-NEXT:    b.l.t (, %s10)
2330  %5 = icmp eq i8 %0, %1
2331  %6 = select fast i1 %5, double %2, double %3
2332  ret double %6
2333}
2334
2335; Function Attrs: norecurse nounwind readnone
2336define double @select_cc_i16_double(i16 signext %0, i16 signext %1, double %2, double %3) {
2337; CHECK-LABEL: select_cc_i16_double:
2338; CHECK:       # %bb.0:
2339; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2340; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2341; CHECK-NEXT:    or %s0, 0, %s3
2342; CHECK-NEXT:    b.l.t (, %s10)
2343  %5 = icmp eq i16 %0, %1
2344  %6 = select fast i1 %5, double %2, double %3
2345  ret double %6
2346}
2347
2348; Function Attrs: norecurse nounwind readnone
2349define double @select_cc_u16_double(i16 zeroext %0, i16 zeroext %1, double %2, double %3) {
2350; CHECK-LABEL: select_cc_u16_double:
2351; CHECK:       # %bb.0:
2352; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2353; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2354; CHECK-NEXT:    or %s0, 0, %s3
2355; CHECK-NEXT:    b.l.t (, %s10)
2356  %5 = icmp eq i16 %0, %1
2357  %6 = select fast i1 %5, double %2, double %3
2358  ret double %6
2359}
2360
2361; Function Attrs: norecurse nounwind readnone
2362define double @select_cc_i32_double(i32 signext %0, i32 signext %1, double %2, double %3) {
2363; CHECK-LABEL: select_cc_i32_double:
2364; CHECK:       # %bb.0:
2365; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2366; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2367; CHECK-NEXT:    or %s0, 0, %s3
2368; CHECK-NEXT:    b.l.t (, %s10)
2369  %5 = icmp eq i32 %0, %1
2370  %6 = select fast i1 %5, double %2, double %3
2371  ret double %6
2372}
2373
2374; Function Attrs: norecurse nounwind readnone
2375define double @select_cc_u32_double(i32 zeroext %0, i32 zeroext %1, double %2, double %3) {
2376; CHECK-LABEL: select_cc_u32_double:
2377; CHECK:       # %bb.0:
2378; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2379; CHECK-NEXT:    cmov.w.eq %s3, %s2, %s0
2380; CHECK-NEXT:    or %s0, 0, %s3
2381; CHECK-NEXT:    b.l.t (, %s10)
2382  %5 = icmp eq i32 %0, %1
2383  %6 = select fast i1 %5, double %2, double %3
2384  ret double %6
2385}
2386
2387; Function Attrs: norecurse nounwind readnone
2388define double @select_cc_i64_double(i64 %0, i64 %1, double %2, double %3) {
2389; CHECK-LABEL: select_cc_i64_double:
2390; CHECK:       # %bb.0:
2391; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2392; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
2393; CHECK-NEXT:    or %s0, 0, %s3
2394; CHECK-NEXT:    b.l.t (, %s10)
2395  %5 = icmp eq i64 %0, %1
2396  %6 = select fast i1 %5, double %2, double %3
2397  ret double %6
2398}
2399
2400; Function Attrs: norecurse nounwind readnone
2401define double @select_cc_u64_double(i64 %0, i64 %1, double %2, double %3) {
2402; CHECK-LABEL: select_cc_u64_double:
2403; CHECK:       # %bb.0:
2404; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2405; CHECK-NEXT:    cmov.l.eq %s3, %s2, %s0
2406; CHECK-NEXT:    or %s0, 0, %s3
2407; CHECK-NEXT:    b.l.t (, %s10)
2408  %5 = icmp eq i64 %0, %1
2409  %6 = select fast i1 %5, double %2, double %3
2410  ret double %6
2411}
2412
2413; Function Attrs: norecurse nounwind readnone
2414define double @select_cc_i128_double(i128 %0, i128 %1, double %2, double %3) {
2415; CHECK-LABEL: select_cc_i128_double:
2416; CHECK:       # %bb.0:
2417; CHECK-NEXT:    xor %s1, %s1, %s3
2418; CHECK-NEXT:    xor %s0, %s0, %s2
2419; CHECK-NEXT:    or %s0, %s0, %s1
2420; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
2421; CHECK-NEXT:    or %s0, 0, %s5
2422; CHECK-NEXT:    b.l.t (, %s10)
2423  %5 = icmp eq i128 %0, %1
2424  %6 = select fast i1 %5, double %2, double %3
2425  ret double %6
2426}
2427
2428; Function Attrs: norecurse nounwind readnone
2429define double @select_cc_u128_double(i128 %0, i128 %1, double %2, double %3) {
2430; CHECK-LABEL: select_cc_u128_double:
2431; CHECK:       # %bb.0:
2432; CHECK-NEXT:    xor %s1, %s1, %s3
2433; CHECK-NEXT:    xor %s0, %s0, %s2
2434; CHECK-NEXT:    or %s0, %s0, %s1
2435; CHECK-NEXT:    cmov.l.eq %s5, %s4, %s0
2436; CHECK-NEXT:    or %s0, 0, %s5
2437; CHECK-NEXT:    b.l.t (, %s10)
2438  %5 = icmp eq i128 %0, %1
2439  %6 = select fast i1 %5, double %2, double %3
2440  ret double %6
2441}
2442
2443; Function Attrs: norecurse nounwind readnone
2444define double @select_cc_float_double(float %0, float %1, double %2, double %3) {
2445; CHECK-LABEL: select_cc_float_double:
2446; CHECK:       # %bb.0:
2447; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
2448; CHECK-NEXT:    cmov.s.eq %s3, %s2, %s0
2449; CHECK-NEXT:    or %s0, 0, %s3
2450; CHECK-NEXT:    b.l.t (, %s10)
2451  %5 = fcmp fast oeq float %0, %1
2452  %6 = select fast i1 %5, double %2, double %3
2453  ret double %6
2454}
2455
2456; Function Attrs: norecurse nounwind readnone
2457define double @select_cc_double_double(double %0, double %1, double %2, double %3) {
2458; CHECK-LABEL: select_cc_double_double:
2459; CHECK:       # %bb.0:
2460; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
2461; CHECK-NEXT:    cmov.d.eq %s3, %s2, %s0
2462; CHECK-NEXT:    or %s0, 0, %s3
2463; CHECK-NEXT:    b.l.t (, %s10)
2464  %5 = fcmp fast oeq double %0, %1
2465  %6 = select fast i1 %5, double %2, double %3
2466  ret double %6
2467}
2468
2469; Function Attrs: norecurse nounwind readnone
2470define double @select_cc_quad_double(fp128 %0, fp128 %1, double %2, double %3) {
2471; CHECK-LABEL: select_cc_quad_double:
2472; CHECK:       # %bb.0:
2473; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
2474; CHECK-NEXT:    cmov.d.eq %s5, %s4, %s0
2475; CHECK-NEXT:    or %s0, 0, %s5
2476; CHECK-NEXT:    b.l.t (, %s10)
2477  %5 = fcmp fast oeq fp128 %0, %1
2478  %6 = select fast i1 %5, double %2, double %3
2479  ret double %6
2480}
2481
2482; Function Attrs: norecurse nounwind readnone
2483define fp128 @select_cc_i1_quad(i1 zeroext %0, i1 zeroext %1, fp128 %2, fp128 %3) {
2484; CHECK-LABEL: select_cc_i1_quad:
2485; CHECK:       # %bb.0:
2486; CHECK-NEXT:    xor %s0, %s0, %s1
2487; CHECK-NEXT:    cmov.w.ne %s2, %s4, %s0
2488; CHECK-NEXT:    cmov.w.ne %s3, %s5, %s0
2489; CHECK-NEXT:    or %s0, 0, %s2
2490; CHECK-NEXT:    or %s1, 0, %s3
2491; CHECK-NEXT:    b.l.t (, %s10)
2492  %5 = xor i1 %0, %1
2493  %6 = select fast i1 %5, fp128 %3, fp128 %2
2494  ret fp128 %6
2495}
2496
2497; Function Attrs: norecurse nounwind readnone
2498define fp128 @select_cc_i8_quad(i8 signext %0, i8 signext %1, fp128 %2, fp128 %3) {
2499; CHECK-LABEL: select_cc_i8_quad:
2500; CHECK:       # %bb.0:
2501; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2502; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2503; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2504; CHECK-NEXT:    or %s0, 0, %s4
2505; CHECK-NEXT:    or %s1, 0, %s5
2506; CHECK-NEXT:    b.l.t (, %s10)
2507  %5 = icmp eq i8 %0, %1
2508  %6 = select fast i1 %5, fp128 %2, fp128 %3
2509  ret fp128 %6
2510}
2511
2512; Function Attrs: norecurse nounwind readnone
2513define fp128 @select_cc_u8_quad(i8 zeroext %0, i8 zeroext %1, fp128 %2, fp128 %3) {
2514; CHECK-LABEL: select_cc_u8_quad:
2515; CHECK:       # %bb.0:
2516; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2517; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2518; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2519; CHECK-NEXT:    or %s0, 0, %s4
2520; CHECK-NEXT:    or %s1, 0, %s5
2521; CHECK-NEXT:    b.l.t (, %s10)
2522  %5 = icmp eq i8 %0, %1
2523  %6 = select fast i1 %5, fp128 %2, fp128 %3
2524  ret fp128 %6
2525}
2526
2527; Function Attrs: norecurse nounwind readnone
2528define fp128 @select_cc_i16_quad(i16 signext %0, i16 signext %1, fp128 %2, fp128 %3) {
2529; CHECK-LABEL: select_cc_i16_quad:
2530; CHECK:       # %bb.0:
2531; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2532; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2533; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2534; CHECK-NEXT:    or %s0, 0, %s4
2535; CHECK-NEXT:    or %s1, 0, %s5
2536; CHECK-NEXT:    b.l.t (, %s10)
2537  %5 = icmp eq i16 %0, %1
2538  %6 = select fast i1 %5, fp128 %2, fp128 %3
2539  ret fp128 %6
2540}
2541
2542; Function Attrs: norecurse nounwind readnone
2543define fp128 @select_cc_u16_quad(i16 zeroext %0, i16 zeroext %1, fp128 %2, fp128 %3) {
2544; CHECK-LABEL: select_cc_u16_quad:
2545; CHECK:       # %bb.0:
2546; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2547; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2548; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2549; CHECK-NEXT:    or %s0, 0, %s4
2550; CHECK-NEXT:    or %s1, 0, %s5
2551; CHECK-NEXT:    b.l.t (, %s10)
2552  %5 = icmp eq i16 %0, %1
2553  %6 = select fast i1 %5, fp128 %2, fp128 %3
2554  ret fp128 %6
2555}
2556
2557; Function Attrs: norecurse nounwind readnone
2558define fp128 @select_cc_i32_quad(i32 signext %0, i32 signext %1, fp128 %2, fp128 %3) {
2559; CHECK-LABEL: select_cc_i32_quad:
2560; CHECK:       # %bb.0:
2561; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2562; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2563; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2564; CHECK-NEXT:    or %s0, 0, %s4
2565; CHECK-NEXT:    or %s1, 0, %s5
2566; CHECK-NEXT:    b.l.t (, %s10)
2567  %5 = icmp eq i32 %0, %1
2568  %6 = select fast i1 %5, fp128 %2, fp128 %3
2569  ret fp128 %6
2570}
2571
2572; Function Attrs: norecurse nounwind readnone
2573define fp128 @select_cc_u32_quad(i32 zeroext %0, i32 zeroext %1, fp128 %2, fp128 %3) {
2574; CHECK-LABEL: select_cc_u32_quad:
2575; CHECK:       # %bb.0:
2576; CHECK-NEXT:    cmpu.w %s0, %s0, %s1
2577; CHECK-NEXT:    cmov.w.eq %s4, %s2, %s0
2578; CHECK-NEXT:    cmov.w.eq %s5, %s3, %s0
2579; CHECK-NEXT:    or %s0, 0, %s4
2580; CHECK-NEXT:    or %s1, 0, %s5
2581; CHECK-NEXT:    b.l.t (, %s10)
2582  %5 = icmp eq i32 %0, %1
2583  %6 = select fast i1 %5, fp128 %2, fp128 %3
2584  ret fp128 %6
2585}
2586
2587; Function Attrs: norecurse nounwind readnone
2588define fp128 @select_cc_i64_quad(i64 %0, i64 %1, fp128 %2, fp128 %3) {
2589; CHECK-LABEL: select_cc_i64_quad:
2590; CHECK:       # %bb.0:
2591; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2592; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
2593; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
2594; CHECK-NEXT:    or %s0, 0, %s4
2595; CHECK-NEXT:    or %s1, 0, %s5
2596; CHECK-NEXT:    b.l.t (, %s10)
2597  %5 = icmp eq i64 %0, %1
2598  %6 = select fast i1 %5, fp128 %2, fp128 %3
2599  ret fp128 %6
2600}
2601
2602; Function Attrs: norecurse nounwind readnone
2603define fp128 @select_cc_u64_quad(i64 %0, i64 %1, fp128 %2, fp128 %3) {
2604; CHECK-LABEL: select_cc_u64_quad:
2605; CHECK:       # %bb.0:
2606; CHECK-NEXT:    cmpu.l %s0, %s0, %s1
2607; CHECK-NEXT:    cmov.l.eq %s4, %s2, %s0
2608; CHECK-NEXT:    cmov.l.eq %s5, %s3, %s0
2609; CHECK-NEXT:    or %s0, 0, %s4
2610; CHECK-NEXT:    or %s1, 0, %s5
2611; CHECK-NEXT:    b.l.t (, %s10)
2612  %5 = icmp eq i64 %0, %1
2613  %6 = select fast i1 %5, fp128 %2, fp128 %3
2614  ret fp128 %6
2615}
2616
2617; Function Attrs: norecurse nounwind readnone
2618define fp128 @select_cc_i128_quad(i128 %0, i128 %1, fp128 %2, fp128 %3) {
2619; CHECK-LABEL: select_cc_i128_quad:
2620; CHECK:       # %bb.0:
2621; CHECK-NEXT:    xor %s1, %s1, %s3
2622; CHECK-NEXT:    xor %s0, %s0, %s2
2623; CHECK-NEXT:    or %s0, %s0, %s1
2624; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
2625; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
2626; CHECK-NEXT:    or %s0, 0, %s6
2627; CHECK-NEXT:    or %s1, 0, %s7
2628; CHECK-NEXT:    b.l.t (, %s10)
2629  %5 = icmp eq i128 %0, %1
2630  %6 = select fast i1 %5, fp128 %2, fp128 %3
2631  ret fp128 %6
2632}
2633
2634; Function Attrs: norecurse nounwind readnone
2635define fp128 @select_cc_u128_quad(i128 %0, i128 %1, fp128 %2, fp128 %3) {
2636; CHECK-LABEL: select_cc_u128_quad:
2637; CHECK:       # %bb.0:
2638; CHECK-NEXT:    xor %s1, %s1, %s3
2639; CHECK-NEXT:    xor %s0, %s0, %s2
2640; CHECK-NEXT:    or %s0, %s0, %s1
2641; CHECK-NEXT:    cmov.l.eq %s6, %s4, %s0
2642; CHECK-NEXT:    cmov.l.eq %s7, %s5, %s0
2643; CHECK-NEXT:    or %s0, 0, %s6
2644; CHECK-NEXT:    or %s1, 0, %s7
2645; CHECK-NEXT:    b.l.t (, %s10)
2646  %5 = icmp eq i128 %0, %1
2647  %6 = select fast i1 %5, fp128 %2, fp128 %3
2648  ret fp128 %6
2649}
2650
2651; Function Attrs: norecurse nounwind readnone
2652define fp128 @select_cc_float_quad(float %0, float %1, fp128 %2, fp128 %3) {
2653; CHECK-LABEL: select_cc_float_quad:
2654; CHECK:       # %bb.0:
2655; CHECK-NEXT:    fcmp.s %s0, %s0, %s1
2656; CHECK-NEXT:    cmov.s.eq %s4, %s2, %s0
2657; CHECK-NEXT:    cmov.s.eq %s5, %s3, %s0
2658; CHECK-NEXT:    or %s0, 0, %s4
2659; CHECK-NEXT:    or %s1, 0, %s5
2660; CHECK-NEXT:    b.l.t (, %s10)
2661  %5 = fcmp fast oeq float %0, %1
2662  %6 = select fast i1 %5, fp128 %2, fp128 %3
2663  ret fp128 %6
2664}
2665
2666; Function Attrs: norecurse nounwind readnone
2667define fp128 @select_cc_double_quad(double %0, double %1, fp128 %2, fp128 %3) {
2668; CHECK-LABEL: select_cc_double_quad:
2669; CHECK:       # %bb.0:
2670; CHECK-NEXT:    fcmp.d %s0, %s0, %s1
2671; CHECK-NEXT:    cmov.d.eq %s4, %s2, %s0
2672; CHECK-NEXT:    cmov.d.eq %s5, %s3, %s0
2673; CHECK-NEXT:    or %s0, 0, %s4
2674; CHECK-NEXT:    or %s1, 0, %s5
2675; CHECK-NEXT:    b.l.t (, %s10)
2676  %5 = fcmp fast oeq double %0, %1
2677  %6 = select fast i1 %5, fp128 %2, fp128 %3
2678  ret fp128 %6
2679}
2680
2681; Function Attrs: norecurse nounwind readnone
2682define fp128 @select_cc_quad_quad(fp128 %0, fp128 %1, fp128 %2, fp128 %3) {
2683; CHECK-LABEL: select_cc_quad_quad:
2684; CHECK:       # %bb.0:
2685; CHECK-NEXT:    fcmp.q %s0, %s0, %s2
2686; CHECK-NEXT:    cmov.d.eq %s6, %s4, %s0
2687; CHECK-NEXT:    cmov.d.eq %s7, %s5, %s0
2688; CHECK-NEXT:    or %s0, 0, %s6
2689; CHECK-NEXT:    or %s1, 0, %s7
2690; CHECK-NEXT:    b.l.t (, %s10)
2691  %5 = fcmp fast oeq fp128 %0, %1
2692  %6 = select fast i1 %5, fp128 %2, fp128 %3
2693  ret fp128 %6
2694}
2695