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