[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / VE / Scalar / select.ll
blobeeb3f036b7dc4aa041eb3405d898ea47b11e0f0a
1 ; RUN: llc < %s -mtriple=ve | FileCheck %s
3 ;;; Test ‘select’ instruction
4 ;;;
5 ;;; Syntax:
6 ;;;   <result> = select [fast-math flags] selty <cond>, <ty> <val1>, <ty> <val2>
7 ;;;                                             ; yields ty
8 ;;;
9 ;;;   selty is either i1 or {<N x i1>}
10 ;;;
11 ;;; Overview:
12 ;;;   The ‘select’ instruction is used to choose one value based on a condition,
13 ;;;   without IR-level branching.
14 ;;;
15 ;;; Arguments:
16 ;;;   The ‘select’ instruction requires an ‘i1’ value or a vector of ‘i1’ values
17 ;;;   indicating the condition, and two values of the same first class type.
18 ;;;
19 ;;;   The optional fast-math flags marker indicates that the select has one or
20 ;;;   more fast-math flags. These are optimization hints to enable otherwise
21 ;;;   unsafe floating-point optimizations. Fast-math flags are only valid for
22 ;;;   selects that return a floating-point scalar or vector type, or an array
23 ;;;   (nested to any depth) of floating-point scalar or vector types.
24 ;;;
25 ;;; Semantics:
26 ;;;   If the condition is an i1 and it evaluates to 1, the instruction returns
27 ;;;   the first value argument; otherwise, it returns the second value argument.
28 ;;;
29 ;;;   If the condition is a vector of i1, then the value arguments must be
30 ;;;   vectors of the same size, and the selection is done element by element.
31 ;;;
32 ;;;   If the condition is an i1 and the value arguments are vectors of the same
33 ;;;   size, then an entire vector is selected.
34 ;;;
35 ;;; Example:
36 ;;;   %X = select i1 true, i8 17, i8 42 ; yields i8:17
37 ;;;
38 ;;; Note:
39 ;;;   We test only i1/i8/u8/i16/u16/i32/u32/i64/u64/i128/u128/float/double/fp128
41 ; Function Attrs: norecurse nounwind readnone
42 define zeroext i1 @select_i1_var(i1 zeroext %0, i1 zeroext %1, i1 zeroext %2) {
43 ; CHECK-LABEL: select_i1_var:
44 ; CHECK:       # %bb.0:
45 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
46 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
47 ; CHECK-NEXT:    b.l.t (, %s10)
48   %4 = select i1 %0, i1 %1, i1 %2
49   ret i1 %4
52 ; Function Attrs: norecurse nounwind readnone
53 define signext i8 @select_i8_var(i1 zeroext %0, i8 signext %1, i8 signext %2) {
54 ; CHECK-LABEL: select_i8_var:
55 ; CHECK:       # %bb.0:
56 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
57 ; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
58 ; CHECK-NEXT:    b.l.t (, %s10)
59   %4 = select i1 %0, i8 %1, i8 %2
60   ret i8 %4
63 ; Function Attrs: norecurse nounwind readnone
64 define zeroext i8 @select_u8_var(i1 zeroext %0, i8 zeroext %1, i8 zeroext %2) {
65 ; CHECK-LABEL: select_u8_var:
66 ; CHECK:       # %bb.0:
67 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
68 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
69 ; CHECK-NEXT:    b.l.t (, %s10)
70   %4 = select i1 %0, i8 %1, i8 %2
71   ret i8 %4
74 ; Function Attrs: norecurse nounwind readnone
75 define signext i16 @select_i16_var(i1 zeroext %0, i16 signext %1, i16 signext %2) {
76 ; CHECK-LABEL: select_i16_var:
77 ; CHECK:       # %bb.0:
78 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
79 ; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
80 ; CHECK-NEXT:    b.l.t (, %s10)
81   %4 = select i1 %0, i16 %1, i16 %2
82   ret i16 %4
85 ; Function Attrs: norecurse nounwind readnone
86 define zeroext i16 @select_u16_var(i1 zeroext %0, i16 zeroext %1, i16 zeroext %2) {
87 ; CHECK-LABEL: select_u16_var:
88 ; CHECK:       # %bb.0:
89 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
90 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
91 ; CHECK-NEXT:    b.l.t (, %s10)
92   %4 = select i1 %0, i16 %1, i16 %2
93   ret i16 %4
96 ; Function Attrs: norecurse nounwind readnone
97 define signext i32 @select_i32_var(i1 zeroext %0, i32 signext %1, i32 signext %2) {
98 ; CHECK-LABEL: select_i32_var:
99 ; CHECK:       # %bb.0:
100 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
101 ; CHECK-NEXT:    adds.w.sx %s0, %s2, (0)1
102 ; CHECK-NEXT:    b.l.t (, %s10)
103   %4 = select i1 %0, i32 %1, i32 %2
104   ret i32 %4
107 ; Function Attrs: norecurse nounwind readnone
108 define zeroext i32 @select_u32_var(i1 zeroext %0, i32 zeroext %1, i32 zeroext %2) {
109 ; CHECK-LABEL: select_u32_var:
110 ; CHECK:       # %bb.0:
111 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
112 ; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
113 ; CHECK-NEXT:    b.l.t (, %s10)
114   %4 = select i1 %0, i32 %1, i32 %2
115   ret i32 %4
118 ; Function Attrs: norecurse nounwind readnone
119 define i64 @select_i64_var(i1 zeroext %0, i64 %1, i64 %2) {
120 ; CHECK-LABEL: select_i64_var:
121 ; CHECK:       # %bb.0:
122 ; CHECK-NEXT:    and %s0, %s0, (32)0
123 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
124 ; CHECK-NEXT:    or %s0, 0, %s2
125 ; CHECK-NEXT:    b.l.t (, %s10)
126   %4 = select i1 %0, i64 %1, i64 %2
127   ret i64 %4
130 ; Function Attrs: norecurse nounwind readnone
131 define i64 @select_u64_var(i1 zeroext %0, i64 %1, i64 %2) {
132 ; CHECK-LABEL: select_u64_var:
133 ; CHECK:       # %bb.0:
134 ; CHECK-NEXT:    and %s0, %s0, (32)0
135 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
136 ; CHECK-NEXT:    or %s0, 0, %s2
137 ; CHECK-NEXT:    b.l.t (, %s10)
138   %4 = select i1 %0, i64 %1, i64 %2
139   ret i64 %4
142 ; Function Attrs: norecurse nounwind readnone
143 define i128 @select_i128_var(i1 zeroext %0, i128 %1, i128 %2) {
144 ; CHECK-LABEL: select_i128_var:
145 ; CHECK:       # %bb.0:
146 ; CHECK-NEXT:    and %s0, %s0, (32)0
147 ; CHECK-NEXT:    cmov.w.ne %s3, %s1, %s0
148 ; CHECK-NEXT:    cmov.w.ne %s4, %s2, %s0
149 ; CHECK-NEXT:    or %s0, 0, %s3
150 ; CHECK-NEXT:    or %s1, 0, %s4
151 ; CHECK-NEXT:    b.l.t (, %s10)
152   %4 = select i1 %0, i128 %1, i128 %2
153   ret i128 %4
156 ; Function Attrs: norecurse nounwind readnone
157 define i128 @select_u128_var(i1 zeroext %0, i128 %1, i128 %2) {
158 ; CHECK-LABEL: select_u128_var:
159 ; CHECK:       # %bb.0:
160 ; CHECK-NEXT:    and %s0, %s0, (32)0
161 ; CHECK-NEXT:    cmov.w.ne %s3, %s1, %s0
162 ; CHECK-NEXT:    cmov.w.ne %s4, %s2, %s0
163 ; CHECK-NEXT:    or %s0, 0, %s3
164 ; CHECK-NEXT:    or %s1, 0, %s4
165 ; CHECK-NEXT:    b.l.t (, %s10)
166   %4 = select i1 %0, i128 %1, i128 %2
167   ret i128 %4
170 ; Function Attrs: norecurse nounwind readnone
171 define float @select_float_var(i1 zeroext %0, float %1, float %2) {
172 ; CHECK-LABEL: select_float_var:
173 ; CHECK:       # %bb.0:
174 ; CHECK-NEXT:    and %s0, %s0, (32)0
175 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
176 ; CHECK-NEXT:    or %s0, 0, %s2
177 ; CHECK-NEXT:    b.l.t (, %s10)
178   %4 = select fast i1 %0, float %1, float %2
179   ret float %4
182 ; Function Attrs: norecurse nounwind readnone
183 define double @select_double_var(i1 zeroext %0, double %1, double %2) {
184 ; CHECK-LABEL: select_double_var:
185 ; CHECK:       # %bb.0:
186 ; CHECK-NEXT:    and %s0, %s0, (32)0
187 ; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
188 ; CHECK-NEXT:    or %s0, 0, %s2
189 ; CHECK-NEXT:    b.l.t (, %s10)
190   %4 = select fast i1 %0, double %1, double %2
191   ret double %4
194 ; Function Attrs: norecurse nounwind readnone
195 define fp128 @select_quad_var(i1 zeroext %0, fp128 %1, fp128 %2) {
196 ; CHECK-LABEL: select_quad_var:
197 ; CHECK:       # %bb.0:
198 ; CHECK-NEXT:    and %s0, %s0, (32)0
199 ; CHECK-NEXT:    cmov.w.ne %s4, %s2, %s0
200 ; CHECK-NEXT:    cmov.w.ne %s5, %s3, %s0
201 ; CHECK-NEXT:    or %s0, 0, %s4
202 ; CHECK-NEXT:    or %s1, 0, %s5
203 ; CHECK-NEXT:    b.l.t (, %s10)
204   %4 = select fast i1 %0, fp128 %1, fp128 %2
205   ret fp128 %4
208 ; Function Attrs: norecurse nounwind readnone
209 define zeroext i1 @select_i1_mimm(i1 zeroext %0, i1 zeroext %1) {
210 ; CHECK-LABEL: select_i1_mimm:
211 ; CHECK:       # %bb.0:
212 ; CHECK-NEXT:    or %s0, %s0, %s1
213 ; CHECK-NEXT:    b.l.t (, %s10)
214   %3 = or i1 %0, %1
215   ret i1 %3
218 ; Function Attrs: norecurse nounwind readnone
219 define signext i8 @select_i8_mimm(i1 zeroext %0, i8 signext %1) {
220 ; CHECK-LABEL: select_i8_mimm:
221 ; CHECK:       # %bb.0:
222 ; CHECK-NEXT:    cmov.w.ne %s1, (57)1, %s0
223 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
224 ; CHECK-NEXT:    b.l.t (, %s10)
225   %3 = select i1 %0, i8 -128, i8 %1
226   ret i8 %3
229 ; Function Attrs: norecurse nounwind readnone
230 define zeroext i8 @select_u8_mimm(i1 zeroext %0, i8 zeroext %1) {
231 ; CHECK-LABEL: select_u8_mimm:
232 ; CHECK:       # %bb.0:
233 ; CHECK-NEXT:    cmov.w.ne %s1, (57)0, %s0
234 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
235 ; CHECK-NEXT:    b.l.t (, %s10)
236   %3 = select i1 %0, i8 127, i8 %1
237   ret i8 %3
240 ; Function Attrs: norecurse nounwind readnone
241 define signext i16 @select_i16_mimm(i1 zeroext %0, i16 signext %1) {
242 ; CHECK-LABEL: select_i16_mimm:
243 ; CHECK:       # %bb.0:
244 ; CHECK-NEXT:    cmov.w.ne %s1, (49)1, %s0
245 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
246 ; CHECK-NEXT:    b.l.t (, %s10)
247   %3 = select i1 %0, i16 -32768, i16 %1
248   ret i16 %3
251 ; Function Attrs: norecurse nounwind readnone
252 define zeroext i16 @select_u16_mimm(i1 zeroext %0, i16 zeroext %1) {
253 ; CHECK-LABEL: select_u16_mimm:
254 ; CHECK:       # %bb.0:
255 ; CHECK-NEXT:    cmov.w.ne %s1, (49)0, %s0
256 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
257 ; CHECK-NEXT:    b.l.t (, %s10)
258   %3 = select i1 %0, i16 32767, i16 %1
259   ret i16 %3
262 ; Function Attrs: norecurse nounwind readnone
263 define signext i32 @select_i32_mimm(i1 zeroext %0, i32 signext %1) {
264 ; CHECK-LABEL: select_i32_mimm:
265 ; CHECK:       # %bb.0:
266 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
267 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
268 ; CHECK-NEXT:    b.l.t (, %s10)
269   %3 = select i1 %0, i32 65535, i32 %1
270   ret i32 %3
273 ; Function Attrs: norecurse nounwind readnone
274 define zeroext i32 @select_u32_mimm(i1 zeroext %0, i32 zeroext %1) {
275 ; CHECK-LABEL: select_u32_mimm:
276 ; CHECK:       # %bb.0:
277 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
278 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
279 ; CHECK-NEXT:    b.l.t (, %s10)
280   %3 = select i1 %0, i32 65535, i32 %1
281   ret i32 %3
284 ; Function Attrs: norecurse nounwind readnone
285 define i64 @select_i64_mimm(i1 zeroext %0, i64 %1) {
286 ; CHECK-LABEL: select_i64_mimm:
287 ; CHECK:       # %bb.0:
288 ; CHECK-NEXT:    and %s0, %s0, (32)0
289 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
290 ; CHECK-NEXT:    or %s0, 0, %s1
291 ; CHECK-NEXT:    b.l.t (, %s10)
292   %3 = select i1 %0, i64 65535, i64 %1
293   ret i64 %3
296 ; Function Attrs: norecurse nounwind readnone
297 define i64 @select_u64_mimm(i1 zeroext %0, i64 %1) {
298 ; CHECK-LABEL: select_u64_mimm:
299 ; CHECK:       # %bb.0:
300 ; CHECK-NEXT:    and %s0, %s0, (32)0
301 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
302 ; CHECK-NEXT:    or %s0, 0, %s1
303 ; CHECK-NEXT:    b.l.t (, %s10)
304   %3 = select i1 %0, i64 65535, i64 %1
305   ret i64 %3
308 ; Function Attrs: norecurse nounwind readnone
309 define i128 @select_i128_mimm(i1 zeroext %0, i128 %1) {
310 ; CHECK-LABEL: select_i128_mimm:
311 ; CHECK:       # %bb.0:
312 ; CHECK-NEXT:    and %s0, %s0, (32)0
313 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
314 ; CHECK-NEXT:    cmov.w.ne %s2, (0)1, %s0
315 ; CHECK-NEXT:    or %s0, 0, %s1
316 ; CHECK-NEXT:    or %s1, 0, %s2
317 ; CHECK-NEXT:    b.l.t (, %s10)
318   %3 = select i1 %0, i128 65535, i128 %1
319   ret i128 %3
322 ; Function Attrs: norecurse nounwind readnone
323 define i128 @select_u128_mimm(i1 zeroext %0, i128 %1) {
324 ; CHECK-LABEL: select_u128_mimm:
325 ; CHECK:       # %bb.0:
326 ; CHECK-NEXT:    and %s0, %s0, (32)0
327 ; CHECK-NEXT:    cmov.w.ne %s1, (48)0, %s0
328 ; CHECK-NEXT:    cmov.w.ne %s2, (0)1, %s0
329 ; CHECK-NEXT:    or %s0, 0, %s1
330 ; CHECK-NEXT:    or %s1, 0, %s2
331 ; CHECK-NEXT:    b.l.t (, %s10)
332   %3 = select i1 %0, i128 65535, i128 %1
333   ret i128 %3
336 ; Function Attrs: norecurse nounwind readnone
337 define float @select_float_mimm(i1 zeroext %0, float %1) {
338 ; CHECK-LABEL: select_float_mimm:
339 ; CHECK:       # %bb.0:
340 ; CHECK-NEXT:    and %s0, %s0, (32)0
341 ; CHECK-NEXT:    cmov.w.ne %s1, (2)1, %s0
342 ; CHECK-NEXT:    or %s0, 0, %s1
343 ; CHECK-NEXT:    b.l.t (, %s10)
344   %3 = select i1 %0, float -2.000000e+00, float %1
345   ret float %3
348 ; Function Attrs: norecurse nounwind readnone
349 define double @select_double_mimm(i1 zeroext %0, double %1) {
350 ; CHECK-LABEL: select_double_mimm:
351 ; CHECK:       # %bb.0:
352 ; CHECK-NEXT:    and %s0, %s0, (32)0
353 ; CHECK-NEXT:    cmov.w.ne %s1, (2)1, %s0
354 ; CHECK-NEXT:    or %s0, 0, %s1
355 ; CHECK-NEXT:    b.l.t (, %s10)
356   %3 = select fast i1 %0, double -2.000000e+00, double %1
357   ret double %3
360 ; Function Attrs: norecurse nounwind readnone
361 define fp128 @select_quad_mimm(i1 zeroext %0, fp128 %1) {
362 ; CHECK-LABEL: select_quad_mimm:
363 ; CHECK:       # %bb.0:
364 ; CHECK-NEXT:    lea %s1, .LCPI{{[0-9]+}}_0@lo
365 ; CHECK-NEXT:    and %s1, %s1, (32)0
366 ; CHECK-NEXT:    lea.sl %s1, .LCPI{{[0-9]+}}_0@hi(, %s1)
367 ; CHECK-NEXT:    ld %s4, 8(, %s1)
368 ; CHECK-NEXT:    ld %s5, (, %s1)
369 ; CHECK-NEXT:    and %s0, %s0, (32)0
370 ; CHECK-NEXT:    cmov.w.ne %s2, %s4, %s0
371 ; CHECK-NEXT:    cmov.w.ne %s3, %s5, %s0
372 ; CHECK-NEXT:    or %s0, 0, %s2
373 ; CHECK-NEXT:    or %s1, 0, %s3
374 ; CHECK-NEXT:    b.l.t (, %s10)
375   %3 = select fast i1 %0, fp128 0xL0000000000000000C000000000000000, fp128 %1
376   ret fp128 %3
379 ; Function Attrs: norecurse nounwind readnone
380 define zeroext i1 @select_mimm_i1(i1 zeroext %0, i1 zeroext %1) {
381 ; CHECK-LABEL: select_mimm_i1:
382 ; CHECK:       # %bb.0:
383 ; CHECK-NEXT:    xor %s0, 1, %s0
384 ; CHECK-NEXT:    or %s0, %s0, %s1
385 ; CHECK-NEXT:    b.l.t (, %s10)
386   %3 = xor i1 %0, true
387   %4 = or i1 %3, %1
388   ret i1 %4
391 ; Function Attrs: norecurse nounwind readnone
392 define signext i8 @select_mimm_i8(i1 zeroext %0, i8 signext %1) {
393 ; CHECK-LABEL: select_mimm_i8:
394 ; CHECK:       # %bb.0:
395 ; CHECK-NEXT:    cmov.w.eq %s1, (57)1, %s0
396 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
397 ; CHECK-NEXT:    b.l.t (, %s10)
398   %3 = select i1 %0, i8 %1, i8 -128
399   ret i8 %3
402 ; Function Attrs: norecurse nounwind readnone
403 define zeroext i8 @select_mimm_u8(i1 zeroext %0, i8 zeroext %1) {
404 ; CHECK-LABEL: select_mimm_u8:
405 ; CHECK:       # %bb.0:
406 ; CHECK-NEXT:    cmov.w.eq %s1, (57)0, %s0
407 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
408 ; CHECK-NEXT:    b.l.t (, %s10)
409   %3 = select i1 %0, i8 %1, i8 127
410   ret i8 %3
413 ; Function Attrs: norecurse nounwind readnone
414 define signext i16 @select_mimm_i16(i1 zeroext %0, i16 signext %1) {
415 ; CHECK-LABEL: select_mimm_i16:
416 ; CHECK:       # %bb.0:
417 ; CHECK-NEXT:    cmov.w.eq %s1, (49)1, %s0
418 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
419 ; CHECK-NEXT:    b.l.t (, %s10)
420   %3 = select i1 %0, i16 %1, i16 -32768
421   ret i16 %3
424 ; Function Attrs: norecurse nounwind readnone
425 define zeroext i16 @select_mimm_u16(i1 zeroext %0, i16 zeroext %1) {
426 ; CHECK-LABEL: select_mimm_u16:
427 ; CHECK:       # %bb.0:
428 ; CHECK-NEXT:    cmov.w.eq %s1, (49)0, %s0
429 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
430 ; CHECK-NEXT:    b.l.t (, %s10)
431   %3 = select i1 %0, i16 %1, i16 32767
432   ret i16 %3
435 ; Function Attrs: norecurse nounwind readnone
436 define signext i32 @select_mimm_i32(i1 zeroext %0, i32 signext %1) {
437 ; CHECK-LABEL: select_mimm_i32:
438 ; CHECK:       # %bb.0:
439 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
440 ; CHECK-NEXT:    adds.w.sx %s0, %s1, (0)1
441 ; CHECK-NEXT:    b.l.t (, %s10)
442   %3 = select i1 %0, i32 %1, i32 65535
443   ret i32 %3
446 ; Function Attrs: norecurse nounwind readnone
447 define zeroext i32 @select_mimm_u32(i1 zeroext %0, i32 zeroext %1) {
448 ; CHECK-LABEL: select_mimm_u32:
449 ; CHECK:       # %bb.0:
450 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
451 ; CHECK-NEXT:    adds.w.zx %s0, %s1, (0)1
452 ; CHECK-NEXT:    b.l.t (, %s10)
453   %3 = select i1 %0, i32 %1, i32 65535
454   ret i32 %3
457 ; Function Attrs: norecurse nounwind readnone
458 define i64 @select_mimm_i64(i1 zeroext %0, i64 %1) {
459 ; CHECK-LABEL: select_mimm_i64:
460 ; CHECK:       # %bb.0:
461 ; CHECK-NEXT:    and %s0, %s0, (32)0
462 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
463 ; CHECK-NEXT:    or %s0, 0, %s1
464 ; CHECK-NEXT:    b.l.t (, %s10)
465   %3 = select i1 %0, i64 %1, i64 65535
466   ret i64 %3
469 ; Function Attrs: norecurse nounwind readnone
470 define i64 @select_mimm_u64(i1 zeroext %0, i64 %1) {
471 ; CHECK-LABEL: select_mimm_u64:
472 ; CHECK:       # %bb.0:
473 ; CHECK-NEXT:    and %s0, %s0, (32)0
474 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
475 ; CHECK-NEXT:    or %s0, 0, %s1
476 ; CHECK-NEXT:    b.l.t (, %s10)
477   %3 = select i1 %0, i64 %1, i64 65535
478   ret i64 %3
481 ; Function Attrs: norecurse nounwind readnone
482 define i128 @select_mimm_i128(i1 zeroext %0, i128 %1) {
483 ; CHECK-LABEL: select_mimm_i128:
484 ; CHECK:       # %bb.0:
485 ; CHECK-NEXT:    and %s0, %s0, (32)0
486 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
487 ; CHECK-NEXT:    cmov.w.eq %s2, (0)1, %s0
488 ; CHECK-NEXT:    or %s0, 0, %s1
489 ; CHECK-NEXT:    or %s1, 0, %s2
490 ; CHECK-NEXT:    b.l.t (, %s10)
491   %3 = select i1 %0, i128 %1, i128 65535
492   ret i128 %3
495 ; Function Attrs: norecurse nounwind readnone
496 define i128 @select_mimm_u128(i1 zeroext %0, i128 %1) {
497 ; CHECK-LABEL: select_mimm_u128:
498 ; CHECK:       # %bb.0:
499 ; CHECK-NEXT:    and %s0, %s0, (32)0
500 ; CHECK-NEXT:    cmov.w.eq %s1, (48)0, %s0
501 ; CHECK-NEXT:    cmov.w.eq %s2, (0)1, %s0
502 ; CHECK-NEXT:    or %s0, 0, %s1
503 ; CHECK-NEXT:    or %s1, 0, %s2
504 ; CHECK-NEXT:    b.l.t (, %s10)
505   %3 = select i1 %0, i128 %1, i128 65535
506   ret i128 %3
509 ; Function Attrs: norecurse nounwind readnone
510 define float @select_mimm_float(i1 zeroext %0, float %1) {
511 ; CHECK-LABEL: select_mimm_float:
512 ; CHECK:       # %bb.0:
513 ; CHECK-NEXT:    and %s0, %s0, (32)0
514 ; CHECK-NEXT:    cmov.w.eq %s1, (2)1, %s0
515 ; CHECK-NEXT:    or %s0, 0, %s1
516 ; CHECK-NEXT:    b.l.t (, %s10)
517   %3 = select i1 %0, float %1, float -2.000000e+00
518   ret float %3
521 ; Function Attrs: norecurse nounwind readnone
522 define double @select_mimm_double(i1 zeroext %0, double %1) {
523 ; CHECK-LABEL: select_mimm_double:
524 ; CHECK:       # %bb.0:
525 ; CHECK-NEXT:    and %s0, %s0, (32)0
526 ; CHECK-NEXT:    cmov.w.eq %s1, (2)1, %s0
527 ; CHECK-NEXT:    or %s0, 0, %s1
528 ; CHECK-NEXT:    b.l.t (, %s10)
529   %3 = select fast i1 %0, double %1, double -2.000000e+00
530   ret double %3
533 ; Function Attrs: norecurse nounwind readnone
534 define fp128 @select_mimm_quad(i1 zeroext %0, fp128 %1) {
535 ; CHECK-LABEL: select_mimm_quad:
536 ; CHECK:       # %bb.0:
537 ; CHECK-NEXT:    lea %s1, .LCPI{{[0-9]+}}_0@lo
538 ; CHECK-NEXT:    and %s1, %s1, (32)0
539 ; CHECK-NEXT:    lea.sl %s1, .LCPI{{[0-9]+}}_0@hi(, %s1)
540 ; CHECK-NEXT:    ld %s4, 8(, %s1)
541 ; CHECK-NEXT:    ld %s5, (, %s1)
542 ; CHECK-NEXT:    and %s0, %s0, (32)0
543 ; CHECK-NEXT:    cmov.w.ne %s4, %s2, %s0
544 ; CHECK-NEXT:    cmov.w.ne %s5, %s3, %s0
545 ; CHECK-NEXT:    or %s0, 0, %s4
546 ; CHECK-NEXT:    or %s1, 0, %s5
547 ; CHECK-NEXT:    b.l.t (, %s10)
548   %3 = select fast i1 %0, fp128 %1, fp128 0xL0000000000000000C000000000000000
549   ret fp128 %3