1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+2e3 | FileCheck %s
3; RUN: llc -verify-machineinstrs -csky-no-aliases < %s -mtriple=csky -mattr=+btst16 | FileCheck %s --check-prefix=GENERIC
4
5define i32 @selectRR_eq_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
6; CHECK-LABEL: selectRR_eq_i32:
7; CHECK:       # %bb.0: # %entry
8; CHECK-NEXT:    cmpne16 a1, a0
9; CHECK-NEXT:    movf32 a2, a3
10; CHECK-NEXT:    mov16 a0, a2
11; CHECK-NEXT:    rts16
12;
13; GENERIC-LABEL: selectRR_eq_i32:
14; GENERIC:       # %bb.0: # %entry
15; GENERIC-NEXT:    .cfi_def_cfa_offset 0
16; GENERIC-NEXT:    subi16 sp, sp, 4
17; GENERIC-NEXT:    .cfi_def_cfa_offset 4
18; GENERIC-NEXT:    cmpne16 a1, a0
19; GENERIC-NEXT:    mvcv16 a0
20; GENERIC-NEXT:    btsti16 a0, 0
21; GENERIC-NEXT:    bt16 .LBB0_2
22; GENERIC-NEXT:  # %bb.1: # %entry
23; GENERIC-NEXT:    mov16 a3, a2
24; GENERIC-NEXT:  .LBB0_2: # %entry
25; GENERIC-NEXT:    mov16 a0, a3
26; GENERIC-NEXT:    addi16 sp, sp, 4
27; GENERIC-NEXT:    rts16
28entry:
29  %icmp = icmp eq i32 %y, %x
30  %ret = select i1 %icmp, i32 %m, i32 %n
31  ret i32 %ret
32}
33
34define i32 @selectRI_eq_i32(i32 %x, i32 %n, i32 %m) {
35; CHECK-LABEL: selectRI_eq_i32:
36; CHECK:       # %bb.0: # %entry
37; CHECK-NEXT:    cmpnei16 a0, 10
38; CHECK-NEXT:    movf32 a1, a2
39; CHECK-NEXT:    mov16 a0, a1
40; CHECK-NEXT:    rts16
41;
42; GENERIC-LABEL: selectRI_eq_i32:
43; GENERIC:       # %bb.0: # %entry
44; GENERIC-NEXT:    .cfi_def_cfa_offset 0
45; GENERIC-NEXT:    subi16 sp, sp, 4
46; GENERIC-NEXT:    .cfi_def_cfa_offset 4
47; GENERIC-NEXT:    cmpnei16 a0, 10
48; GENERIC-NEXT:    mvcv16 a0
49; GENERIC-NEXT:    btsti16 a0, 0
50; GENERIC-NEXT:    bt16 .LBB1_2
51; GENERIC-NEXT:  # %bb.1: # %entry
52; GENERIC-NEXT:    mov16 a2, a1
53; GENERIC-NEXT:  .LBB1_2: # %entry
54; GENERIC-NEXT:    mov16 a0, a2
55; GENERIC-NEXT:    addi16 sp, sp, 4
56; GENERIC-NEXT:    rts16
57entry:
58  %icmp = icmp eq i32 %x, 10
59  %ret = select i1 %icmp, i32 %m, i32 %n
60  ret i32 %ret
61}
62
63define i32 @selectRX_eq_i32(i32 %x, i32 %n, i32 %m) {
64; CHECK-LABEL: selectRX_eq_i32:
65; CHECK:       # %bb.0: # %entry
66; CHECK-NEXT:    movih32 a3, 729
67; CHECK-NEXT:    ori32 a3, a3, 2033
68; CHECK-NEXT:    cmpne16 a0, a3
69; CHECK-NEXT:    movf32 a1, a2
70; CHECK-NEXT:    mov16 a0, a1
71; CHECK-NEXT:    rts16
72;
73; GENERIC-LABEL: selectRX_eq_i32:
74; GENERIC:       # %bb.0: # %entry
75; GENERIC-NEXT:    subi16 sp, sp, 4
76; GENERIC-NEXT:    .cfi_def_cfa_offset 4
77; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
78; GENERIC-NEXT:    .cfi_offset l0, -4
79; GENERIC-NEXT:    subi16 sp, sp, 4
80; GENERIC-NEXT:    .cfi_def_cfa_offset 8
81; GENERIC-NEXT:    movi16 a3, 2
82; GENERIC-NEXT:    lsli16 a3, a3, 24
83; GENERIC-NEXT:    movi16 l0, 217
84; GENERIC-NEXT:    lsli16 l0, l0, 16
85; GENERIC-NEXT:    or16 l0, a3
86; GENERIC-NEXT:    movi16 a3, 7
87; GENERIC-NEXT:    lsli16 a3, a3, 8
88; GENERIC-NEXT:    or16 a3, l0
89; GENERIC-NEXT:    movi16 l0, 241
90; GENERIC-NEXT:    or16 l0, a3
91; GENERIC-NEXT:    cmpne16 a0, l0
92; GENERIC-NEXT:    mvcv16 a0
93; GENERIC-NEXT:    btsti16 a0, 0
94; GENERIC-NEXT:    bt16 .LBB2_2
95; GENERIC-NEXT:  # %bb.1: # %entry
96; GENERIC-NEXT:    mov16 a2, a1
97; GENERIC-NEXT:  .LBB2_2: # %entry
98; GENERIC-NEXT:    mov16 a0, a2
99; GENERIC-NEXT:    addi16 sp, sp, 4
100; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
101; GENERIC-NEXT:    addi16 sp, sp, 4
102; GENERIC-NEXT:    rts16
103entry:
104  %icmp = icmp eq i32 %x, 47777777
105  %ret = select i1 %icmp, i32 %m, i32 %n
106  ret i32 %ret
107}
108
109define i32 @selectC_eq_i32(i1 %c, i32 %n, i32 %m) {
110; CHECK-LABEL: selectC_eq_i32:
111; CHECK:       # %bb.0: # %entry
112; CHECK-NEXT:    btsti32 a0, 0
113; CHECK-NEXT:    movt32 a1, a2
114; CHECK-NEXT:    mov16 a0, a1
115; CHECK-NEXT:    rts16
116;
117; GENERIC-LABEL: selectC_eq_i32:
118; GENERIC:       # %bb.0: # %entry
119; GENERIC-NEXT:    .cfi_def_cfa_offset 0
120; GENERIC-NEXT:    subi16 sp, sp, 4
121; GENERIC-NEXT:    .cfi_def_cfa_offset 4
122; GENERIC-NEXT:    btsti16 a0, 0
123; GENERIC-NEXT:    bt16 .LBB3_2
124; GENERIC-NEXT:  # %bb.1: # %entry
125; GENERIC-NEXT:    mov16 a2, a1
126; GENERIC-NEXT:  .LBB3_2: # %entry
127; GENERIC-NEXT:    mov16 a0, a2
128; GENERIC-NEXT:    addi16 sp, sp, 4
129; GENERIC-NEXT:    rts16
130entry:
131  %ret = select i1 %c, i32 %m, i32 %n
132  ret i32 %ret
133}
134
135define i64 @selectRR_eq_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
136; CHECK-LABEL: selectRR_eq_i64:
137; CHECK:       # %bb.0: # %entry
138; CHECK-NEXT:    xor16 a1, a3
139; CHECK-NEXT:    xor16 a0, a2
140; CHECK-NEXT:    or16 a0, a1
141; CHECK-NEXT:    cmpnei16 a0, 0
142; CHECK-NEXT:    movi16 a0, 0
143; CHECK-NEXT:    addu16 a0, sp
144; CHECK-NEXT:    mov16 a1, a0
145; CHECK-NEXT:    addi16 a0, sp, 8
146; CHECK-NEXT:    movf32 a1, a0
147; CHECK-NEXT:    ld16.w a0, (a1, 0)
148; CHECK-NEXT:    ld16.w a1, (a1, 4)
149; CHECK-NEXT:    rts16
150;
151; GENERIC-LABEL: selectRR_eq_i64:
152; GENERIC:       # %bb.0: # %entry
153; GENERIC-NEXT:    .cfi_def_cfa_offset 0
154; GENERIC-NEXT:    subi16 sp, sp, 4
155; GENERIC-NEXT:    .cfi_def_cfa_offset 4
156; GENERIC-NEXT:    xor16 a1, a3
157; GENERIC-NEXT:    xor16 a0, a2
158; GENERIC-NEXT:    or16 a0, a1
159; GENERIC-NEXT:    cmpnei16 a0, 0
160; GENERIC-NEXT:    mvcv16 a0
161; GENERIC-NEXT:    btsti16 a0, 0
162; GENERIC-NEXT:    bt16 .LBB4_2
163; GENERIC-NEXT:  # %bb.1: # %entry
164; GENERIC-NEXT:    movi16 a0, 4
165; GENERIC-NEXT:    br32 .LBB4_3
166; GENERIC-NEXT:  .LBB4_2:
167; GENERIC-NEXT:    movi16 a0, 12
168; GENERIC-NEXT:  .LBB4_3: # %entry
169; GENERIC-NEXT:    addu16 a0, sp
170; GENERIC-NEXT:    mov16 a1, a0
171; GENERIC-NEXT:    ld16.w a0, (a0, 0)
172; GENERIC-NEXT:    ld16.w a1, (a1, 4)
173; GENERIC-NEXT:    addi16 sp, sp, 4
174; GENERIC-NEXT:    rts16
175entry:
176  %icmp = icmp eq i64 %y, %x
177  %ret = select i1 %icmp, i64 %m, i64 %n
178  ret i64 %ret
179}
180
181define i64 @selectRI_eq_i64(i64 %x, i64 %n, i64 %m) {
182; CHECK-LABEL: selectRI_eq_i64:
183; CHECK:       # %bb.0: # %entry
184; CHECK-NEXT:    ld32.w t0, (sp, 4)
185; CHECK-NEXT:    ld32.w t1, (sp, 0)
186; CHECK-NEXT:    xori32 a0, a0, 10
187; CHECK-NEXT:    or16 a0, a1
188; CHECK-NEXT:    cmpnei16 a0, 0
189; CHECK-NEXT:    movf32 a2, t1
190; CHECK-NEXT:    movf32 a3, t0
191; CHECK-NEXT:    mov16 a0, a2
192; CHECK-NEXT:    mov16 a1, a3
193; CHECK-NEXT:    rts16
194;
195; GENERIC-LABEL: selectRI_eq_i64:
196; GENERIC:       # %bb.0: # %entry
197; GENERIC-NEXT:    subi16 sp, sp, 4
198; GENERIC-NEXT:    .cfi_def_cfa_offset 4
199; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
200; GENERIC-NEXT:    .cfi_offset l0, -4
201; GENERIC-NEXT:    subi16 sp, sp, 4
202; GENERIC-NEXT:    .cfi_def_cfa_offset 8
203; GENERIC-NEXT:    movi16 l0, 10
204; GENERIC-NEXT:    xor16 l0, a0
205; GENERIC-NEXT:    or16 l0, a1
206; GENERIC-NEXT:    cmpnei16 l0, 0
207; GENERIC-NEXT:    mvcv16 a0
208; GENERIC-NEXT:    btsti16 a0, 0
209; GENERIC-NEXT:    bf16 .LBB5_2
210; GENERIC-NEXT:  # %bb.1:
211; GENERIC-NEXT:    ld16.w a2, (sp, 8)
212; GENERIC-NEXT:  .LBB5_2: # %entry
213; GENERIC-NEXT:    btsti16 a0, 0
214; GENERIC-NEXT:    bf16 .LBB5_4
215; GENERIC-NEXT:  # %bb.3:
216; GENERIC-NEXT:    ld16.w a3, (sp, 12)
217; GENERIC-NEXT:  .LBB5_4: # %entry
218; GENERIC-NEXT:    mov16 a0, a2
219; GENERIC-NEXT:    mov16 a1, a3
220; GENERIC-NEXT:    addi16 sp, sp, 4
221; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
222; GENERIC-NEXT:    addi16 sp, sp, 4
223; GENERIC-NEXT:    rts16
224entry:
225  %icmp = icmp eq i64 %x, 10
226  %ret = select i1 %icmp, i64 %m, i64 %n
227  ret i64 %ret
228}
229
230define i64 @selectRX_eq_i64(i64 %x, i64 %n, i64 %m) {
231; CHECK-LABEL: selectRX_eq_i64:
232; CHECK:       # %bb.0: # %entry
233; CHECK-NEXT:    subi16 sp, sp, 4
234; CHECK-NEXT:    .cfi_def_cfa_offset 4
235; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
236; CHECK-NEXT:    .cfi_offset l0, -4
237; CHECK-NEXT:    .cfi_def_cfa_offset 4
238; CHECK-NEXT:    ld32.w t0, (sp, 8)
239; CHECK-NEXT:    ld32.w t1, (sp, 4)
240; CHECK-NEXT:    movih32 l0, 729
241; CHECK-NEXT:    ori32 l0, l0, 2033
242; CHECK-NEXT:    xor16 a0, l0
243; CHECK-NEXT:    or16 a0, a1
244; CHECK-NEXT:    cmpnei16 a0, 0
245; CHECK-NEXT:    movf32 a2, t1
246; CHECK-NEXT:    movf32 a3, t0
247; CHECK-NEXT:    mov16 a0, a2
248; CHECK-NEXT:    mov16 a1, a3
249; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
250; CHECK-NEXT:    addi16 sp, sp, 4
251; CHECK-NEXT:    rts16
252;
253; GENERIC-LABEL: selectRX_eq_i64:
254; GENERIC:       # %bb.0: # %entry
255; GENERIC-NEXT:    subi16 sp, sp, 8
256; GENERIC-NEXT:    .cfi_def_cfa_offset 8
257; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
258; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
259; GENERIC-NEXT:    .cfi_offset l1, -4
260; GENERIC-NEXT:    .cfi_offset l0, -8
261; GENERIC-NEXT:    subi16 sp, sp, 4
262; GENERIC-NEXT:    .cfi_def_cfa_offset 12
263; GENERIC-NEXT:    movi16 l0, 2
264; GENERIC-NEXT:    lsli16 l0, l0, 24
265; GENERIC-NEXT:    movi16 l1, 217
266; GENERIC-NEXT:    lsli16 l1, l1, 16
267; GENERIC-NEXT:    or16 l1, l0
268; GENERIC-NEXT:    movi16 l0, 7
269; GENERIC-NEXT:    lsli16 l0, l0, 8
270; GENERIC-NEXT:    or16 l0, l1
271; GENERIC-NEXT:    movi16 l1, 241
272; GENERIC-NEXT:    or16 l1, l0
273; GENERIC-NEXT:    xor16 l1, a0
274; GENERIC-NEXT:    or16 l1, a1
275; GENERIC-NEXT:    cmpnei16 l1, 0
276; GENERIC-NEXT:    mvcv16 a0
277; GENERIC-NEXT:    btsti16 a0, 0
278; GENERIC-NEXT:    bf16 .LBB6_2
279; GENERIC-NEXT:  # %bb.1:
280; GENERIC-NEXT:    ld16.w a2, (sp, 12)
281; GENERIC-NEXT:  .LBB6_2: # %entry
282; GENERIC-NEXT:    btsti16 a0, 0
283; GENERIC-NEXT:    bf16 .LBB6_4
284; GENERIC-NEXT:  # %bb.3:
285; GENERIC-NEXT:    ld16.w a3, (sp, 16)
286; GENERIC-NEXT:  .LBB6_4: # %entry
287; GENERIC-NEXT:    mov16 a0, a2
288; GENERIC-NEXT:    mov16 a1, a3
289; GENERIC-NEXT:    addi16 sp, sp, 4
290; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
291; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
292; GENERIC-NEXT:    addi16 sp, sp, 8
293; GENERIC-NEXT:    rts16
294entry:
295  %icmp = icmp eq i64 %x, 47777777
296  %ret = select i1 %icmp, i64 %m, i64 %n
297  ret i64 %ret
298}
299
300define i64 @selectC_eq_i64(i1 %c, i64 %n, i64 %m) {
301; CHECK-LABEL: selectC_eq_i64:
302; CHECK:       # %bb.0: # %entry
303; CHECK-NEXT:    ld32.w t0, (sp, 0)
304; CHECK-NEXT:    btsti32 a0, 0
305; CHECK-NEXT:    movt32 a1, a3
306; CHECK-NEXT:    movt32 a2, t0
307; CHECK-NEXT:    mov16 a0, a1
308; CHECK-NEXT:    mov16 a1, a2
309; CHECK-NEXT:    rts16
310;
311; GENERIC-LABEL: selectC_eq_i64:
312; GENERIC:       # %bb.0: # %entry
313; GENERIC-NEXT:    .cfi_def_cfa_offset 0
314; GENERIC-NEXT:    subi16 sp, sp, 4
315; GENERIC-NEXT:    .cfi_def_cfa_offset 4
316; GENERIC-NEXT:    btsti16 a0, 0
317; GENERIC-NEXT:    bt16 .LBB7_2
318; GENERIC-NEXT:  # %bb.1: # %entry
319; GENERIC-NEXT:    mov16 a3, a1
320; GENERIC-NEXT:  .LBB7_2: # %entry
321; GENERIC-NEXT:    btsti16 a0, 0
322; GENERIC-NEXT:    bf16 .LBB7_4
323; GENERIC-NEXT:  # %bb.3:
324; GENERIC-NEXT:    ld16.w a2, (sp, 4)
325; GENERIC-NEXT:  .LBB7_4: # %entry
326; GENERIC-NEXT:    mov16 a0, a3
327; GENERIC-NEXT:    mov16 a1, a2
328; GENERIC-NEXT:    addi16 sp, sp, 4
329; GENERIC-NEXT:    rts16
330entry:
331  %ret = select i1 %c, i64 %m, i64 %n
332  ret i64 %ret
333}
334
335
336define i16 @selectRR_eq_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
337; CHECK-LABEL: selectRR_eq_i16:
338; CHECK:       # %bb.0: # %entry
339; CHECK-NEXT:    zexth16 a0, a0
340; CHECK-NEXT:    zexth16 a1, a1
341; CHECK-NEXT:    cmpne16 a1, a0
342; CHECK-NEXT:    movf32 a2, a3
343; CHECK-NEXT:    mov16 a0, a2
344; CHECK-NEXT:    rts16
345;
346; GENERIC-LABEL: selectRR_eq_i16:
347; GENERIC:       # %bb.0: # %entry
348; GENERIC-NEXT:    subi16 sp, sp, 12
349; GENERIC-NEXT:    .cfi_def_cfa_offset 12
350; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
351; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
352; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
353; GENERIC-NEXT:    .cfi_offset l2, -4
354; GENERIC-NEXT:    .cfi_offset l1, -8
355; GENERIC-NEXT:    .cfi_offset l0, -12
356; GENERIC-NEXT:    subi16 sp, sp, 4
357; GENERIC-NEXT:    .cfi_def_cfa_offset 16
358; GENERIC-NEXT:    movi16 l0, 0
359; GENERIC-NEXT:    lsli16 l1, l0, 24
360; GENERIC-NEXT:    lsli16 l0, l0, 16
361; GENERIC-NEXT:    or16 l0, l1
362; GENERIC-NEXT:    movi16 l1, 255
363; GENERIC-NEXT:    lsli16 l2, l1, 8
364; GENERIC-NEXT:    or16 l2, l0
365; GENERIC-NEXT:    or16 l2, l1
366; GENERIC-NEXT:    and16 a0, l2
367; GENERIC-NEXT:    and16 l2, a1
368; GENERIC-NEXT:    cmpne16 l2, a0
369; GENERIC-NEXT:    mvcv16 a0
370; GENERIC-NEXT:    btsti16 a0, 0
371; GENERIC-NEXT:    bt16 .LBB8_2
372; GENERIC-NEXT:  # %bb.1: # %entry
373; GENERIC-NEXT:    mov16 a3, a2
374; GENERIC-NEXT:  .LBB8_2: # %entry
375; GENERIC-NEXT:    mov16 a0, a3
376; GENERIC-NEXT:    addi16 sp, sp, 4
377; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
378; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
379; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
380; GENERIC-NEXT:    addi16 sp, sp, 12
381; GENERIC-NEXT:    rts16
382entry:
383  %icmp = icmp eq i16 %y, %x
384  %ret = select i1 %icmp, i16 %m, i16 %n
385  ret i16 %ret
386}
387
388define i16 @selectRI_eq_i16(i16 %x, i16 %n, i16 %m) {
389; CHECK-LABEL: selectRI_eq_i16:
390; CHECK:       # %bb.0: # %entry
391; CHECK-NEXT:    zexth16 a0, a0
392; CHECK-NEXT:    cmpnei16 a0, 10
393; CHECK-NEXT:    movf32 a1, a2
394; CHECK-NEXT:    mov16 a0, a1
395; CHECK-NEXT:    rts16
396;
397; GENERIC-LABEL: selectRI_eq_i16:
398; GENERIC:       # %bb.0: # %entry
399; GENERIC-NEXT:    subi16 sp, sp, 8
400; GENERIC-NEXT:    .cfi_def_cfa_offset 8
401; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
402; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
403; GENERIC-NEXT:    .cfi_offset l1, -4
404; GENERIC-NEXT:    .cfi_offset l0, -8
405; GENERIC-NEXT:    subi16 sp, sp, 4
406; GENERIC-NEXT:    .cfi_def_cfa_offset 12
407; GENERIC-NEXT:    movi16 a3, 0
408; GENERIC-NEXT:    lsli16 l0, a3, 24
409; GENERIC-NEXT:    lsli16 a3, a3, 16
410; GENERIC-NEXT:    or16 a3, l0
411; GENERIC-NEXT:    movi16 l0, 255
412; GENERIC-NEXT:    lsli16 l1, l0, 8
413; GENERIC-NEXT:    or16 l1, a3
414; GENERIC-NEXT:    or16 l1, l0
415; GENERIC-NEXT:    and16 l1, a0
416; GENERIC-NEXT:    cmpnei16 l1, 10
417; GENERIC-NEXT:    mvcv16 a0
418; GENERIC-NEXT:    btsti16 a0, 0
419; GENERIC-NEXT:    bt16 .LBB9_2
420; GENERIC-NEXT:  # %bb.1: # %entry
421; GENERIC-NEXT:    mov16 a2, a1
422; GENERIC-NEXT:  .LBB9_2: # %entry
423; GENERIC-NEXT:    mov16 a0, a2
424; GENERIC-NEXT:    addi16 sp, sp, 4
425; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
426; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
427; GENERIC-NEXT:    addi16 sp, sp, 8
428; GENERIC-NEXT:    rts16
429entry:
430  %icmp = icmp eq i16 %x, 10
431  %ret = select i1 %icmp, i16 %m, i16 %n
432  ret i16 %ret
433}
434
435define i16 @selectRX_eq_i16(i16 %x, i16 %n, i16 %m) {
436; CHECK-LABEL: selectRX_eq_i16:
437; CHECK:       # %bb.0: # %entry
438; CHECK-NEXT:    zexth16 a0, a0
439; CHECK-NEXT:    cmpnei32 a0, 2033
440; CHECK-NEXT:    movf32 a1, a2
441; CHECK-NEXT:    mov16 a0, a1
442; CHECK-NEXT:    rts16
443;
444; GENERIC-LABEL: selectRX_eq_i16:
445; GENERIC:       # %bb.0: # %entry
446; GENERIC-NEXT:    subi16 sp, sp, 8
447; GENERIC-NEXT:    .cfi_def_cfa_offset 8
448; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
449; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
450; GENERIC-NEXT:    .cfi_offset l1, -4
451; GENERIC-NEXT:    .cfi_offset l0, -8
452; GENERIC-NEXT:    subi16 sp, sp, 4
453; GENERIC-NEXT:    .cfi_def_cfa_offset 12
454; GENERIC-NEXT:    movi16 a3, 0
455; GENERIC-NEXT:    lsli16 l0, a3, 24
456; GENERIC-NEXT:    lsli16 a3, a3, 16
457; GENERIC-NEXT:    or16 a3, l0
458; GENERIC-NEXT:    movi16 l0, 255
459; GENERIC-NEXT:    lsli16 l1, l0, 8
460; GENERIC-NEXT:    or16 l1, a3
461; GENERIC-NEXT:    or16 l1, l0
462; GENERIC-NEXT:    and16 l1, a0
463; GENERIC-NEXT:    movi16 a0, 7
464; GENERIC-NEXT:    lsli16 a0, a0, 8
465; GENERIC-NEXT:    or16 a0, a3
466; GENERIC-NEXT:    movi16 a3, 241
467; GENERIC-NEXT:    or16 a3, a0
468; GENERIC-NEXT:    cmpne16 l1, a3
469; GENERIC-NEXT:    mvcv16 a0
470; GENERIC-NEXT:    btsti16 a0, 0
471; GENERIC-NEXT:    bt16 .LBB10_2
472; GENERIC-NEXT:  # %bb.1: # %entry
473; GENERIC-NEXT:    mov16 a2, a1
474; GENERIC-NEXT:  .LBB10_2: # %entry
475; GENERIC-NEXT:    mov16 a0, a2
476; GENERIC-NEXT:    addi16 sp, sp, 4
477; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
478; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
479; GENERIC-NEXT:    addi16 sp, sp, 8
480; GENERIC-NEXT:    rts16
481entry:
482  %icmp = icmp eq i16 %x, 47777777
483  %ret = select i1 %icmp, i16 %m, i16 %n
484  ret i16 %ret
485}
486
487define i16 @selectC_eq_i16(i1 %c, i16 %n, i16 %m) {
488; CHECK-LABEL: selectC_eq_i16:
489; CHECK:       # %bb.0: # %entry
490; CHECK-NEXT:    btsti32 a0, 0
491; CHECK-NEXT:    movt32 a1, a2
492; CHECK-NEXT:    mov16 a0, a1
493; CHECK-NEXT:    rts16
494;
495; GENERIC-LABEL: selectC_eq_i16:
496; GENERIC:       # %bb.0: # %entry
497; GENERIC-NEXT:    .cfi_def_cfa_offset 0
498; GENERIC-NEXT:    subi16 sp, sp, 4
499; GENERIC-NEXT:    .cfi_def_cfa_offset 4
500; GENERIC-NEXT:    btsti16 a0, 0
501; GENERIC-NEXT:    bt16 .LBB11_2
502; GENERIC-NEXT:  # %bb.1: # %entry
503; GENERIC-NEXT:    mov16 a2, a1
504; GENERIC-NEXT:  .LBB11_2: # %entry
505; GENERIC-NEXT:    mov16 a0, a2
506; GENERIC-NEXT:    addi16 sp, sp, 4
507; GENERIC-NEXT:    rts16
508entry:
509  %ret = select i1 %c, i16 %m, i16 %n
510  ret i16 %ret
511}
512
513
514define i8 @selectRR_eq_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
515; CHECK-LABEL: selectRR_eq_i8:
516; CHECK:       # %bb.0: # %entry
517; CHECK-NEXT:    zextb16 a0, a0
518; CHECK-NEXT:    zextb16 a1, a1
519; CHECK-NEXT:    cmpne16 a1, a0
520; CHECK-NEXT:    movf32 a2, a3
521; CHECK-NEXT:    mov16 a0, a2
522; CHECK-NEXT:    rts16
523;
524; GENERIC-LABEL: selectRR_eq_i8:
525; GENERIC:       # %bb.0: # %entry
526; GENERIC-NEXT:    subi16 sp, sp, 4
527; GENERIC-NEXT:    .cfi_def_cfa_offset 4
528; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
529; GENERIC-NEXT:    .cfi_offset l0, -4
530; GENERIC-NEXT:    subi16 sp, sp, 4
531; GENERIC-NEXT:    .cfi_def_cfa_offset 8
532; GENERIC-NEXT:    movi16 l0, 255
533; GENERIC-NEXT:    and16 a0, l0
534; GENERIC-NEXT:    and16 a1, l0
535; GENERIC-NEXT:    cmpne16 a1, a0
536; GENERIC-NEXT:    mvcv16 a0
537; GENERIC-NEXT:    btsti16 a0, 0
538; GENERIC-NEXT:    bt16 .LBB12_2
539; GENERIC-NEXT:  # %bb.1: # %entry
540; GENERIC-NEXT:    mov16 a3, a2
541; GENERIC-NEXT:  .LBB12_2: # %entry
542; GENERIC-NEXT:    mov16 a0, a3
543; GENERIC-NEXT:    addi16 sp, sp, 4
544; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
545; GENERIC-NEXT:    addi16 sp, sp, 4
546; GENERIC-NEXT:    rts16
547entry:
548  %icmp = icmp eq i8 %y, %x
549  %ret = select i1 %icmp, i8 %m, i8 %n
550  ret i8 %ret
551}
552
553define i8 @selectRI_eq_i8(i8 %x, i8 %n, i8 %m) {
554; CHECK-LABEL: selectRI_eq_i8:
555; CHECK:       # %bb.0: # %entry
556; CHECK-NEXT:    zextb16 a0, a0
557; CHECK-NEXT:    cmpnei16 a0, 10
558; CHECK-NEXT:    movf32 a1, a2
559; CHECK-NEXT:    mov16 a0, a1
560; CHECK-NEXT:    rts16
561;
562; GENERIC-LABEL: selectRI_eq_i8:
563; GENERIC:       # %bb.0: # %entry
564; GENERIC-NEXT:    .cfi_def_cfa_offset 0
565; GENERIC-NEXT:    subi16 sp, sp, 4
566; GENERIC-NEXT:    .cfi_def_cfa_offset 4
567; GENERIC-NEXT:    movi16 a3, 255
568; GENERIC-NEXT:    and16 a3, a0
569; GENERIC-NEXT:    cmpnei16 a3, 10
570; GENERIC-NEXT:    mvcv16 a0
571; GENERIC-NEXT:    btsti16 a0, 0
572; GENERIC-NEXT:    bt16 .LBB13_2
573; GENERIC-NEXT:  # %bb.1: # %entry
574; GENERIC-NEXT:    mov16 a2, a1
575; GENERIC-NEXT:  .LBB13_2: # %entry
576; GENERIC-NEXT:    mov16 a0, a2
577; GENERIC-NEXT:    addi16 sp, sp, 4
578; GENERIC-NEXT:    rts16
579entry:
580  %icmp = icmp eq i8 %x, 10
581  %ret = select i1 %icmp, i8 %m, i8 %n
582  ret i8 %ret
583}
584
585define i8 @selectRX_eq_i8(i8 %x, i8 %n, i8 %m) {
586; CHECK-LABEL: selectRX_eq_i8:
587; CHECK:       # %bb.0: # %entry
588; CHECK-NEXT:    zextb16 a0, a0
589; CHECK-NEXT:    cmpnei32 a0, 241
590; CHECK-NEXT:    movf32 a1, a2
591; CHECK-NEXT:    mov16 a0, a1
592; CHECK-NEXT:    rts16
593;
594; GENERIC-LABEL: selectRX_eq_i8:
595; GENERIC:       # %bb.0: # %entry
596; GENERIC-NEXT:    .cfi_def_cfa_offset 0
597; GENERIC-NEXT:    subi16 sp, sp, 4
598; GENERIC-NEXT:    .cfi_def_cfa_offset 4
599; GENERIC-NEXT:    movi16 a3, 255
600; GENERIC-NEXT:    and16 a3, a0
601; GENERIC-NEXT:    movi16 a0, 241
602; GENERIC-NEXT:    cmpne16 a3, a0
603; GENERIC-NEXT:    mvcv16 a0
604; GENERIC-NEXT:    btsti16 a0, 0
605; GENERIC-NEXT:    bt16 .LBB14_2
606; GENERIC-NEXT:  # %bb.1: # %entry
607; GENERIC-NEXT:    mov16 a2, a1
608; GENERIC-NEXT:  .LBB14_2: # %entry
609; GENERIC-NEXT:    mov16 a0, a2
610; GENERIC-NEXT:    addi16 sp, sp, 4
611; GENERIC-NEXT:    rts16
612entry:
613  %icmp = icmp eq i8 %x, 47777777
614  %ret = select i1 %icmp, i8 %m, i8 %n
615  ret i8 %ret
616}
617
618define i8 @selectC_eq_i8(i1 %c, i8 %n, i8 %m) {
619; CHECK-LABEL: selectC_eq_i8:
620; CHECK:       # %bb.0: # %entry
621; CHECK-NEXT:    btsti32 a0, 0
622; CHECK-NEXT:    movt32 a1, a2
623; CHECK-NEXT:    mov16 a0, a1
624; CHECK-NEXT:    rts16
625;
626; GENERIC-LABEL: selectC_eq_i8:
627; GENERIC:       # %bb.0: # %entry
628; GENERIC-NEXT:    .cfi_def_cfa_offset 0
629; GENERIC-NEXT:    subi16 sp, sp, 4
630; GENERIC-NEXT:    .cfi_def_cfa_offset 4
631; GENERIC-NEXT:    btsti16 a0, 0
632; GENERIC-NEXT:    bt16 .LBB15_2
633; GENERIC-NEXT:  # %bb.1: # %entry
634; GENERIC-NEXT:    mov16 a2, a1
635; GENERIC-NEXT:  .LBB15_2: # %entry
636; GENERIC-NEXT:    mov16 a0, a2
637; GENERIC-NEXT:    addi16 sp, sp, 4
638; GENERIC-NEXT:    rts16
639entry:
640  %ret = select i1 %c, i8 %m, i8 %n
641  ret i8 %ret
642}
643
644
645define i1 @selectRR_eq_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
646; CHECK-LABEL: selectRR_eq_i1:
647; CHECK:       # %bb.0: # %entry
648; CHECK-NEXT:    xor16 a0, a1
649; CHECK-NEXT:    btsti32 a0, 0
650; CHECK-NEXT:    movt32 a3, a2
651; CHECK-NEXT:    mov16 a0, a3
652; CHECK-NEXT:    rts16
653;
654; GENERIC-LABEL: selectRR_eq_i1:
655; GENERIC:       # %bb.0: # %entry
656; GENERIC-NEXT:    .cfi_def_cfa_offset 0
657; GENERIC-NEXT:    subi16 sp, sp, 4
658; GENERIC-NEXT:    .cfi_def_cfa_offset 4
659; GENERIC-NEXT:    xor16 a0, a1
660; GENERIC-NEXT:    btsti16 a0, 0
661; GENERIC-NEXT:    bt16 .LBB16_2
662; GENERIC-NEXT:  # %bb.1: # %entry
663; GENERIC-NEXT:    mov16 a2, a3
664; GENERIC-NEXT:  .LBB16_2: # %entry
665; GENERIC-NEXT:    mov16 a0, a2
666; GENERIC-NEXT:    addi16 sp, sp, 4
667; GENERIC-NEXT:    rts16
668entry:
669  %icmp = icmp eq i1 %y, %x
670  %ret = select i1 %icmp, i1 %m, i1 %n
671  ret i1 %ret
672}
673
674define i1 @selectRI_eq_i1(i1 %x, i1 %n, i1 %m) {
675; CHECK-LABEL: selectRI_eq_i1:
676; CHECK:       # %bb.0: # %entry
677; CHECK-NEXT:    btsti32 a0, 0
678; CHECK-NEXT:    movt32 a2, a1
679; CHECK-NEXT:    mov16 a0, a2
680; CHECK-NEXT:    rts16
681;
682; GENERIC-LABEL: selectRI_eq_i1:
683; GENERIC:       # %bb.0: # %entry
684; GENERIC-NEXT:    .cfi_def_cfa_offset 0
685; GENERIC-NEXT:    subi16 sp, sp, 4
686; GENERIC-NEXT:    .cfi_def_cfa_offset 4
687; GENERIC-NEXT:    btsti16 a0, 0
688; GENERIC-NEXT:    bt16 .LBB17_2
689; GENERIC-NEXT:  # %bb.1: # %entry
690; GENERIC-NEXT:    mov16 a1, a2
691; GENERIC-NEXT:  .LBB17_2: # %entry
692; GENERIC-NEXT:    mov16 a0, a1
693; GENERIC-NEXT:    addi16 sp, sp, 4
694; GENERIC-NEXT:    rts16
695entry:
696  %icmp = icmp eq i1 %x, 10
697  %ret = select i1 %icmp, i1 %m, i1 %n
698  ret i1 %ret
699}
700
701define i1 @selectRX_eq_i1(i1 %x, i1 %n, i1 %m) {
702; CHECK-LABEL: selectRX_eq_i1:
703; CHECK:       # %bb.0: # %entry
704; CHECK-NEXT:    btsti32 a0, 0
705; CHECK-NEXT:    movt32 a1, a2
706; CHECK-NEXT:    mov16 a0, a1
707; CHECK-NEXT:    rts16
708;
709; GENERIC-LABEL: selectRX_eq_i1:
710; GENERIC:       # %bb.0: # %entry
711; GENERIC-NEXT:    .cfi_def_cfa_offset 0
712; GENERIC-NEXT:    subi16 sp, sp, 4
713; GENERIC-NEXT:    .cfi_def_cfa_offset 4
714; GENERIC-NEXT:    btsti16 a0, 0
715; GENERIC-NEXT:    bt16 .LBB18_2
716; GENERIC-NEXT:  # %bb.1: # %entry
717; GENERIC-NEXT:    mov16 a2, a1
718; GENERIC-NEXT:  .LBB18_2: # %entry
719; GENERIC-NEXT:    mov16 a0, a2
720; GENERIC-NEXT:    addi16 sp, sp, 4
721; GENERIC-NEXT:    rts16
722entry:
723  %icmp = icmp eq i1 %x, 47777777
724  %ret = select i1 %icmp, i1 %m, i1 %n
725  ret i1 %ret
726}
727
728define i1 @selectC_eq_i1(i1 %c, i1 %n, i1 %m) {
729; CHECK-LABEL: selectC_eq_i1:
730; CHECK:       # %bb.0: # %entry
731; CHECK-NEXT:    btsti32 a0, 0
732; CHECK-NEXT:    movt32 a1, a2
733; CHECK-NEXT:    mov16 a0, a1
734; CHECK-NEXT:    rts16
735;
736; GENERIC-LABEL: selectC_eq_i1:
737; GENERIC:       # %bb.0: # %entry
738; GENERIC-NEXT:    .cfi_def_cfa_offset 0
739; GENERIC-NEXT:    subi16 sp, sp, 4
740; GENERIC-NEXT:    .cfi_def_cfa_offset 4
741; GENERIC-NEXT:    btsti16 a0, 0
742; GENERIC-NEXT:    bt16 .LBB19_2
743; GENERIC-NEXT:  # %bb.1: # %entry
744; GENERIC-NEXT:    mov16 a2, a1
745; GENERIC-NEXT:  .LBB19_2: # %entry
746; GENERIC-NEXT:    mov16 a0, a2
747; GENERIC-NEXT:    addi16 sp, sp, 4
748; GENERIC-NEXT:    rts16
749entry:
750  %ret = select i1 %c, i1 %m, i1 %n
751  ret i1 %ret
752}
753
754
755define i32 @selectRR_ne_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
756; CHECK-LABEL: selectRR_ne_i32:
757; CHECK:       # %bb.0: # %entry
758; CHECK-NEXT:    cmpne16 a1, a0
759; CHECK-NEXT:    movt32 a2, a3
760; CHECK-NEXT:    mov16 a0, a2
761; CHECK-NEXT:    rts16
762;
763; GENERIC-LABEL: selectRR_ne_i32:
764; GENERIC:       # %bb.0: # %entry
765; GENERIC-NEXT:    .cfi_def_cfa_offset 0
766; GENERIC-NEXT:    subi16 sp, sp, 4
767; GENERIC-NEXT:    .cfi_def_cfa_offset 4
768; GENERIC-NEXT:    cmpne16 a1, a0
769; GENERIC-NEXT:    mvcv16 a0
770; GENERIC-NEXT:    movi16 a1, 1
771; GENERIC-NEXT:    subu16 a1, a0
772; GENERIC-NEXT:    btsti16 a1, 0
773; GENERIC-NEXT:    bt16 .LBB20_2
774; GENERIC-NEXT:  # %bb.1: # %entry
775; GENERIC-NEXT:    mov16 a3, a2
776; GENERIC-NEXT:  .LBB20_2: # %entry
777; GENERIC-NEXT:    mov16 a0, a3
778; GENERIC-NEXT:    addi16 sp, sp, 4
779; GENERIC-NEXT:    rts16
780entry:
781  %icmp = icmp ne i32 %y, %x
782  %ret = select i1 %icmp, i32 %m, i32 %n
783  ret i32 %ret
784}
785
786define i32 @selectRI_ne_i32(i32 %x, i32 %n, i32 %m) {
787; CHECK-LABEL: selectRI_ne_i32:
788; CHECK:       # %bb.0: # %entry
789; CHECK-NEXT:    cmpnei16 a0, 10
790; CHECK-NEXT:    movt32 a1, a2
791; CHECK-NEXT:    mov16 a0, a1
792; CHECK-NEXT:    rts16
793;
794; GENERIC-LABEL: selectRI_ne_i32:
795; GENERIC:       # %bb.0: # %entry
796; GENERIC-NEXT:    .cfi_def_cfa_offset 0
797; GENERIC-NEXT:    subi16 sp, sp, 4
798; GENERIC-NEXT:    .cfi_def_cfa_offset 4
799; GENERIC-NEXT:    cmpnei16 a0, 10
800; GENERIC-NEXT:    mvcv16 a0
801; GENERIC-NEXT:    movi16 a3, 1
802; GENERIC-NEXT:    subu16 a3, a0
803; GENERIC-NEXT:    btsti16 a3, 0
804; GENERIC-NEXT:    bt16 .LBB21_2
805; GENERIC-NEXT:  # %bb.1: # %entry
806; GENERIC-NEXT:    mov16 a2, a1
807; GENERIC-NEXT:  .LBB21_2: # %entry
808; GENERIC-NEXT:    mov16 a0, a2
809; GENERIC-NEXT:    addi16 sp, sp, 4
810; GENERIC-NEXT:    rts16
811entry:
812  %icmp = icmp ne i32 %x, 10
813  %ret = select i1 %icmp, i32 %m, i32 %n
814  ret i32 %ret
815}
816
817define i32 @selectRX_ne_i32(i32 %x, i32 %n, i32 %m) {
818; CHECK-LABEL: selectRX_ne_i32:
819; CHECK:       # %bb.0: # %entry
820; CHECK-NEXT:    movih32 a3, 729
821; CHECK-NEXT:    ori32 a3, a3, 2033
822; CHECK-NEXT:    cmpne16 a0, a3
823; CHECK-NEXT:    movt32 a1, a2
824; CHECK-NEXT:    mov16 a0, a1
825; CHECK-NEXT:    rts16
826;
827; GENERIC-LABEL: selectRX_ne_i32:
828; GENERIC:       # %bb.0: # %entry
829; GENERIC-NEXT:    subi16 sp, sp, 4
830; GENERIC-NEXT:    .cfi_def_cfa_offset 4
831; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
832; GENERIC-NEXT:    .cfi_offset l0, -4
833; GENERIC-NEXT:    subi16 sp, sp, 4
834; GENERIC-NEXT:    .cfi_def_cfa_offset 8
835; GENERIC-NEXT:    movi16 a3, 2
836; GENERIC-NEXT:    lsli16 a3, a3, 24
837; GENERIC-NEXT:    movi16 l0, 217
838; GENERIC-NEXT:    lsli16 l0, l0, 16
839; GENERIC-NEXT:    or16 l0, a3
840; GENERIC-NEXT:    movi16 a3, 7
841; GENERIC-NEXT:    lsli16 a3, a3, 8
842; GENERIC-NEXT:    or16 a3, l0
843; GENERIC-NEXT:    movi16 l0, 241
844; GENERIC-NEXT:    or16 l0, a3
845; GENERIC-NEXT:    cmpne16 a0, l0
846; GENERIC-NEXT:    mvcv16 a0
847; GENERIC-NEXT:    movi16 a3, 1
848; GENERIC-NEXT:    subu16 a3, a0
849; GENERIC-NEXT:    btsti16 a3, 0
850; GENERIC-NEXT:    bt16 .LBB22_2
851; GENERIC-NEXT:  # %bb.1: # %entry
852; GENERIC-NEXT:    mov16 a2, a1
853; GENERIC-NEXT:  .LBB22_2: # %entry
854; GENERIC-NEXT:    mov16 a0, a2
855; GENERIC-NEXT:    addi16 sp, sp, 4
856; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
857; GENERIC-NEXT:    addi16 sp, sp, 4
858; GENERIC-NEXT:    rts16
859entry:
860  %icmp = icmp ne i32 %x, 47777777
861  %ret = select i1 %icmp, i32 %m, i32 %n
862  ret i32 %ret
863}
864
865define i32 @selectC_ne_i32(i1 %c, i32 %n, i32 %m) {
866; CHECK-LABEL: selectC_ne_i32:
867; CHECK:       # %bb.0: # %entry
868; CHECK-NEXT:    btsti32 a0, 0
869; CHECK-NEXT:    movt32 a1, a2
870; CHECK-NEXT:    mov16 a0, a1
871; CHECK-NEXT:    rts16
872;
873; GENERIC-LABEL: selectC_ne_i32:
874; GENERIC:       # %bb.0: # %entry
875; GENERIC-NEXT:    .cfi_def_cfa_offset 0
876; GENERIC-NEXT:    subi16 sp, sp, 4
877; GENERIC-NEXT:    .cfi_def_cfa_offset 4
878; GENERIC-NEXT:    btsti16 a0, 0
879; GENERIC-NEXT:    bt16 .LBB23_2
880; GENERIC-NEXT:  # %bb.1: # %entry
881; GENERIC-NEXT:    mov16 a2, a1
882; GENERIC-NEXT:  .LBB23_2: # %entry
883; GENERIC-NEXT:    mov16 a0, a2
884; GENERIC-NEXT:    addi16 sp, sp, 4
885; GENERIC-NEXT:    rts16
886entry:
887  %ret = select i1 %c, i32 %m, i32 %n
888  ret i32 %ret
889}
890
891define i64 @selectRR_ne_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
892; CHECK-LABEL: selectRR_ne_i64:
893; CHECK:       # %bb.0: # %entry
894; CHECK-NEXT:    xor16 a1, a3
895; CHECK-NEXT:    xor16 a0, a2
896; CHECK-NEXT:    or16 a0, a1
897; CHECK-NEXT:    cmpnei16 a0, 0
898; CHECK-NEXT:    movi16 a0, 0
899; CHECK-NEXT:    addu16 a0, sp
900; CHECK-NEXT:    mov16 a1, a0
901; CHECK-NEXT:    addi16 a0, sp, 8
902; CHECK-NEXT:    movt32 a1, a0
903; CHECK-NEXT:    ld16.w a0, (a1, 0)
904; CHECK-NEXT:    ld16.w a1, (a1, 4)
905; CHECK-NEXT:    rts16
906;
907; GENERIC-LABEL: selectRR_ne_i64:
908; GENERIC:       # %bb.0: # %entry
909; GENERIC-NEXT:    .cfi_def_cfa_offset 0
910; GENERIC-NEXT:    subi16 sp, sp, 4
911; GENERIC-NEXT:    .cfi_def_cfa_offset 4
912; GENERIC-NEXT:    xor16 a1, a3
913; GENERIC-NEXT:    xor16 a0, a2
914; GENERIC-NEXT:    or16 a0, a1
915; GENERIC-NEXT:    cmpnei16 a0, 0
916; GENERIC-NEXT:    mvcv16 a0
917; GENERIC-NEXT:    movi16 a1, 1
918; GENERIC-NEXT:    subu16 a1, a0
919; GENERIC-NEXT:    btsti16 a1, 0
920; GENERIC-NEXT:    bt16 .LBB24_2
921; GENERIC-NEXT:  # %bb.1: # %entry
922; GENERIC-NEXT:    movi16 a0, 4
923; GENERIC-NEXT:    br32 .LBB24_3
924; GENERIC-NEXT:  .LBB24_2:
925; GENERIC-NEXT:    movi16 a0, 12
926; GENERIC-NEXT:  .LBB24_3: # %entry
927; GENERIC-NEXT:    addu16 a0, sp
928; GENERIC-NEXT:    mov16 a1, a0
929; GENERIC-NEXT:    ld16.w a0, (a0, 0)
930; GENERIC-NEXT:    ld16.w a1, (a1, 4)
931; GENERIC-NEXT:    addi16 sp, sp, 4
932; GENERIC-NEXT:    rts16
933entry:
934  %icmp = icmp ne i64 %y, %x
935  %ret = select i1 %icmp, i64 %m, i64 %n
936  ret i64 %ret
937}
938
939define i64 @selectRI_ne_i64(i64 %x, i64 %n, i64 %m) {
940; CHECK-LABEL: selectRI_ne_i64:
941; CHECK:       # %bb.0: # %entry
942; CHECK-NEXT:    ld32.w t0, (sp, 4)
943; CHECK-NEXT:    ld32.w t1, (sp, 0)
944; CHECK-NEXT:    xori32 a0, a0, 10
945; CHECK-NEXT:    or16 a0, a1
946; CHECK-NEXT:    cmpnei16 a0, 0
947; CHECK-NEXT:    movt32 a2, t1
948; CHECK-NEXT:    movt32 a3, t0
949; CHECK-NEXT:    mov16 a0, a2
950; CHECK-NEXT:    mov16 a1, a3
951; CHECK-NEXT:    rts16
952;
953; GENERIC-LABEL: selectRI_ne_i64:
954; GENERIC:       # %bb.0: # %entry
955; GENERIC-NEXT:    subi16 sp, sp, 4
956; GENERIC-NEXT:    .cfi_def_cfa_offset 4
957; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
958; GENERIC-NEXT:    .cfi_offset l0, -4
959; GENERIC-NEXT:    subi16 sp, sp, 4
960; GENERIC-NEXT:    .cfi_def_cfa_offset 8
961; GENERIC-NEXT:    movi16 l0, 10
962; GENERIC-NEXT:    xor16 l0, a0
963; GENERIC-NEXT:    or16 l0, a1
964; GENERIC-NEXT:    cmpnei16 l0, 0
965; GENERIC-NEXT:    mvcv16 a1
966; GENERIC-NEXT:    movi16 a0, 1
967; GENERIC-NEXT:    subu16 a0, a1
968; GENERIC-NEXT:    btsti16 a0, 0
969; GENERIC-NEXT:    bf16 .LBB25_2
970; GENERIC-NEXT:  # %bb.1:
971; GENERIC-NEXT:    ld16.w a2, (sp, 8)
972; GENERIC-NEXT:  .LBB25_2: # %entry
973; GENERIC-NEXT:    btsti16 a0, 0
974; GENERIC-NEXT:    bf16 .LBB25_4
975; GENERIC-NEXT:  # %bb.3:
976; GENERIC-NEXT:    ld16.w a3, (sp, 12)
977; GENERIC-NEXT:  .LBB25_4: # %entry
978; GENERIC-NEXT:    mov16 a0, a2
979; GENERIC-NEXT:    mov16 a1, a3
980; GENERIC-NEXT:    addi16 sp, sp, 4
981; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
982; GENERIC-NEXT:    addi16 sp, sp, 4
983; GENERIC-NEXT:    rts16
984entry:
985  %icmp = icmp ne i64 %x, 10
986  %ret = select i1 %icmp, i64 %m, i64 %n
987  ret i64 %ret
988}
989
990define i64 @selectRX_ne_i64(i64 %x, i64 %n, i64 %m) {
991; CHECK-LABEL: selectRX_ne_i64:
992; CHECK:       # %bb.0: # %entry
993; CHECK-NEXT:    subi16 sp, sp, 4
994; CHECK-NEXT:    .cfi_def_cfa_offset 4
995; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
996; CHECK-NEXT:    .cfi_offset l0, -4
997; CHECK-NEXT:    .cfi_def_cfa_offset 4
998; CHECK-NEXT:    ld32.w t0, (sp, 8)
999; CHECK-NEXT:    ld32.w t1, (sp, 4)
1000; CHECK-NEXT:    movih32 l0, 729
1001; CHECK-NEXT:    ori32 l0, l0, 2033
1002; CHECK-NEXT:    xor16 a0, l0
1003; CHECK-NEXT:    or16 a0, a1
1004; CHECK-NEXT:    cmpnei16 a0, 0
1005; CHECK-NEXT:    movt32 a2, t1
1006; CHECK-NEXT:    movt32 a3, t0
1007; CHECK-NEXT:    mov16 a0, a2
1008; CHECK-NEXT:    mov16 a1, a3
1009; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1010; CHECK-NEXT:    addi16 sp, sp, 4
1011; CHECK-NEXT:    rts16
1012;
1013; GENERIC-LABEL: selectRX_ne_i64:
1014; GENERIC:       # %bb.0: # %entry
1015; GENERIC-NEXT:    subi16 sp, sp, 8
1016; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1017; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1018; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1019; GENERIC-NEXT:    .cfi_offset l1, -4
1020; GENERIC-NEXT:    .cfi_offset l0, -8
1021; GENERIC-NEXT:    subi16 sp, sp, 4
1022; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1023; GENERIC-NEXT:    movi16 l0, 2
1024; GENERIC-NEXT:    lsli16 l0, l0, 24
1025; GENERIC-NEXT:    movi16 l1, 217
1026; GENERIC-NEXT:    lsli16 l1, l1, 16
1027; GENERIC-NEXT:    or16 l1, l0
1028; GENERIC-NEXT:    movi16 l0, 7
1029; GENERIC-NEXT:    lsli16 l0, l0, 8
1030; GENERIC-NEXT:    or16 l0, l1
1031; GENERIC-NEXT:    movi16 l1, 241
1032; GENERIC-NEXT:    or16 l1, l0
1033; GENERIC-NEXT:    xor16 l1, a0
1034; GENERIC-NEXT:    or16 l1, a1
1035; GENERIC-NEXT:    cmpnei16 l1, 0
1036; GENERIC-NEXT:    mvcv16 a1
1037; GENERIC-NEXT:    movi16 a0, 1
1038; GENERIC-NEXT:    subu16 a0, a1
1039; GENERIC-NEXT:    btsti16 a0, 0
1040; GENERIC-NEXT:    bf16 .LBB26_2
1041; GENERIC-NEXT:  # %bb.1:
1042; GENERIC-NEXT:    ld16.w a2, (sp, 12)
1043; GENERIC-NEXT:  .LBB26_2: # %entry
1044; GENERIC-NEXT:    btsti16 a0, 0
1045; GENERIC-NEXT:    bf16 .LBB26_4
1046; GENERIC-NEXT:  # %bb.3:
1047; GENERIC-NEXT:    ld16.w a3, (sp, 16)
1048; GENERIC-NEXT:  .LBB26_4: # %entry
1049; GENERIC-NEXT:    mov16 a0, a2
1050; GENERIC-NEXT:    mov16 a1, a3
1051; GENERIC-NEXT:    addi16 sp, sp, 4
1052; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1053; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1054; GENERIC-NEXT:    addi16 sp, sp, 8
1055; GENERIC-NEXT:    rts16
1056entry:
1057  %icmp = icmp ne i64 %x, 47777777
1058  %ret = select i1 %icmp, i64 %m, i64 %n
1059  ret i64 %ret
1060}
1061
1062define i64 @selectC_ne_i64(i1 %c, i64 %n, i64 %m) {
1063; CHECK-LABEL: selectC_ne_i64:
1064; CHECK:       # %bb.0: # %entry
1065; CHECK-NEXT:    ld32.w t0, (sp, 0)
1066; CHECK-NEXT:    btsti32 a0, 0
1067; CHECK-NEXT:    movt32 a1, a3
1068; CHECK-NEXT:    movt32 a2, t0
1069; CHECK-NEXT:    mov16 a0, a1
1070; CHECK-NEXT:    mov16 a1, a2
1071; CHECK-NEXT:    rts16
1072;
1073; GENERIC-LABEL: selectC_ne_i64:
1074; GENERIC:       # %bb.0: # %entry
1075; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1076; GENERIC-NEXT:    subi16 sp, sp, 4
1077; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1078; GENERIC-NEXT:    btsti16 a0, 0
1079; GENERIC-NEXT:    bt16 .LBB27_2
1080; GENERIC-NEXT:  # %bb.1: # %entry
1081; GENERIC-NEXT:    mov16 a3, a1
1082; GENERIC-NEXT:  .LBB27_2: # %entry
1083; GENERIC-NEXT:    btsti16 a0, 0
1084; GENERIC-NEXT:    bf16 .LBB27_4
1085; GENERIC-NEXT:  # %bb.3:
1086; GENERIC-NEXT:    ld16.w a2, (sp, 4)
1087; GENERIC-NEXT:  .LBB27_4: # %entry
1088; GENERIC-NEXT:    mov16 a0, a3
1089; GENERIC-NEXT:    mov16 a1, a2
1090; GENERIC-NEXT:    addi16 sp, sp, 4
1091; GENERIC-NEXT:    rts16
1092entry:
1093  %ret = select i1 %c, i64 %m, i64 %n
1094  ret i64 %ret
1095}
1096
1097
1098define i16 @selectRR_ne_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
1099; CHECK-LABEL: selectRR_ne_i16:
1100; CHECK:       # %bb.0: # %entry
1101; CHECK-NEXT:    zexth16 a0, a0
1102; CHECK-NEXT:    zexth16 a1, a1
1103; CHECK-NEXT:    cmpne16 a1, a0
1104; CHECK-NEXT:    movt32 a2, a3
1105; CHECK-NEXT:    mov16 a0, a2
1106; CHECK-NEXT:    rts16
1107;
1108; GENERIC-LABEL: selectRR_ne_i16:
1109; GENERIC:       # %bb.0: # %entry
1110; GENERIC-NEXT:    subi16 sp, sp, 12
1111; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1112; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
1113; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1114; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1115; GENERIC-NEXT:    .cfi_offset l2, -4
1116; GENERIC-NEXT:    .cfi_offset l1, -8
1117; GENERIC-NEXT:    .cfi_offset l0, -12
1118; GENERIC-NEXT:    subi16 sp, sp, 4
1119; GENERIC-NEXT:    .cfi_def_cfa_offset 16
1120; GENERIC-NEXT:    movi16 l0, 0
1121; GENERIC-NEXT:    lsli16 l1, l0, 24
1122; GENERIC-NEXT:    lsli16 l0, l0, 16
1123; GENERIC-NEXT:    or16 l0, l1
1124; GENERIC-NEXT:    movi16 l1, 255
1125; GENERIC-NEXT:    lsli16 l2, l1, 8
1126; GENERIC-NEXT:    or16 l2, l0
1127; GENERIC-NEXT:    or16 l2, l1
1128; GENERIC-NEXT:    and16 a0, l2
1129; GENERIC-NEXT:    and16 l2, a1
1130; GENERIC-NEXT:    cmpne16 l2, a0
1131; GENERIC-NEXT:    mvcv16 a0
1132; GENERIC-NEXT:    movi16 a1, 1
1133; GENERIC-NEXT:    subu16 a1, a0
1134; GENERIC-NEXT:    btsti16 a1, 0
1135; GENERIC-NEXT:    bt16 .LBB28_2
1136; GENERIC-NEXT:  # %bb.1: # %entry
1137; GENERIC-NEXT:    mov16 a3, a2
1138; GENERIC-NEXT:  .LBB28_2: # %entry
1139; GENERIC-NEXT:    mov16 a0, a3
1140; GENERIC-NEXT:    addi16 sp, sp, 4
1141; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1142; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1143; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
1144; GENERIC-NEXT:    addi16 sp, sp, 12
1145; GENERIC-NEXT:    rts16
1146entry:
1147  %icmp = icmp ne i16 %y, %x
1148  %ret = select i1 %icmp, i16 %m, i16 %n
1149  ret i16 %ret
1150}
1151
1152define i16 @selectRI_ne_i16(i16 %x, i16 %n, i16 %m) {
1153; CHECK-LABEL: selectRI_ne_i16:
1154; CHECK:       # %bb.0: # %entry
1155; CHECK-NEXT:    zexth16 a0, a0
1156; CHECK-NEXT:    cmpnei16 a0, 10
1157; CHECK-NEXT:    movt32 a1, a2
1158; CHECK-NEXT:    mov16 a0, a1
1159; CHECK-NEXT:    rts16
1160;
1161; GENERIC-LABEL: selectRI_ne_i16:
1162; GENERIC:       # %bb.0: # %entry
1163; GENERIC-NEXT:    subi16 sp, sp, 8
1164; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1165; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1166; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1167; GENERIC-NEXT:    .cfi_offset l1, -4
1168; GENERIC-NEXT:    .cfi_offset l0, -8
1169; GENERIC-NEXT:    subi16 sp, sp, 4
1170; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1171; GENERIC-NEXT:    movi16 a3, 0
1172; GENERIC-NEXT:    lsli16 l0, a3, 24
1173; GENERIC-NEXT:    lsli16 a3, a3, 16
1174; GENERIC-NEXT:    or16 a3, l0
1175; GENERIC-NEXT:    movi16 l0, 255
1176; GENERIC-NEXT:    lsli16 l1, l0, 8
1177; GENERIC-NEXT:    or16 l1, a3
1178; GENERIC-NEXT:    or16 l1, l0
1179; GENERIC-NEXT:    and16 l1, a0
1180; GENERIC-NEXT:    cmpnei16 l1, 10
1181; GENERIC-NEXT:    mvcv16 a0
1182; GENERIC-NEXT:    movi16 a3, 1
1183; GENERIC-NEXT:    subu16 a3, a0
1184; GENERIC-NEXT:    btsti16 a3, 0
1185; GENERIC-NEXT:    bt16 .LBB29_2
1186; GENERIC-NEXT:  # %bb.1: # %entry
1187; GENERIC-NEXT:    mov16 a2, a1
1188; GENERIC-NEXT:  .LBB29_2: # %entry
1189; GENERIC-NEXT:    mov16 a0, a2
1190; GENERIC-NEXT:    addi16 sp, sp, 4
1191; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1192; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1193; GENERIC-NEXT:    addi16 sp, sp, 8
1194; GENERIC-NEXT:    rts16
1195entry:
1196  %icmp = icmp ne i16 %x, 10
1197  %ret = select i1 %icmp, i16 %m, i16 %n
1198  ret i16 %ret
1199}
1200
1201define i16 @selectRX_ne_i16(i16 %x, i16 %n, i16 %m) {
1202; CHECK-LABEL: selectRX_ne_i16:
1203; CHECK:       # %bb.0: # %entry
1204; CHECK-NEXT:    zexth16 a0, a0
1205; CHECK-NEXT:    cmpnei32 a0, 2033
1206; CHECK-NEXT:    movt32 a1, a2
1207; CHECK-NEXT:    mov16 a0, a1
1208; CHECK-NEXT:    rts16
1209;
1210; GENERIC-LABEL: selectRX_ne_i16:
1211; GENERIC:       # %bb.0: # %entry
1212; GENERIC-NEXT:    subi16 sp, sp, 8
1213; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1214; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1215; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1216; GENERIC-NEXT:    .cfi_offset l1, -4
1217; GENERIC-NEXT:    .cfi_offset l0, -8
1218; GENERIC-NEXT:    subi16 sp, sp, 4
1219; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1220; GENERIC-NEXT:    movi16 a3, 0
1221; GENERIC-NEXT:    lsli16 l0, a3, 24
1222; GENERIC-NEXT:    lsli16 a3, a3, 16
1223; GENERIC-NEXT:    or16 a3, l0
1224; GENERIC-NEXT:    movi16 l0, 255
1225; GENERIC-NEXT:    lsli16 l1, l0, 8
1226; GENERIC-NEXT:    or16 l1, a3
1227; GENERIC-NEXT:    or16 l1, l0
1228; GENERIC-NEXT:    and16 l1, a0
1229; GENERIC-NEXT:    movi16 a0, 7
1230; GENERIC-NEXT:    lsli16 a0, a0, 8
1231; GENERIC-NEXT:    or16 a0, a3
1232; GENERIC-NEXT:    movi16 a3, 241
1233; GENERIC-NEXT:    or16 a3, a0
1234; GENERIC-NEXT:    cmpne16 l1, a3
1235; GENERIC-NEXT:    mvcv16 a0
1236; GENERIC-NEXT:    movi16 a3, 1
1237; GENERIC-NEXT:    subu16 a3, a0
1238; GENERIC-NEXT:    btsti16 a3, 0
1239; GENERIC-NEXT:    bt16 .LBB30_2
1240; GENERIC-NEXT:  # %bb.1: # %entry
1241; GENERIC-NEXT:    mov16 a2, a1
1242; GENERIC-NEXT:  .LBB30_2: # %entry
1243; GENERIC-NEXT:    mov16 a0, a2
1244; GENERIC-NEXT:    addi16 sp, sp, 4
1245; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1246; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1247; GENERIC-NEXT:    addi16 sp, sp, 8
1248; GENERIC-NEXT:    rts16
1249entry:
1250  %icmp = icmp ne i16 %x, 47777777
1251  %ret = select i1 %icmp, i16 %m, i16 %n
1252  ret i16 %ret
1253}
1254
1255define i16 @selectC_ne_i16(i1 %c, i16 %n, i16 %m) {
1256; CHECK-LABEL: selectC_ne_i16:
1257; CHECK:       # %bb.0: # %entry
1258; CHECK-NEXT:    btsti32 a0, 0
1259; CHECK-NEXT:    movt32 a1, a2
1260; CHECK-NEXT:    mov16 a0, a1
1261; CHECK-NEXT:    rts16
1262;
1263; GENERIC-LABEL: selectC_ne_i16:
1264; GENERIC:       # %bb.0: # %entry
1265; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1266; GENERIC-NEXT:    subi16 sp, sp, 4
1267; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1268; GENERIC-NEXT:    btsti16 a0, 0
1269; GENERIC-NEXT:    bt16 .LBB31_2
1270; GENERIC-NEXT:  # %bb.1: # %entry
1271; GENERIC-NEXT:    mov16 a2, a1
1272; GENERIC-NEXT:  .LBB31_2: # %entry
1273; GENERIC-NEXT:    mov16 a0, a2
1274; GENERIC-NEXT:    addi16 sp, sp, 4
1275; GENERIC-NEXT:    rts16
1276entry:
1277  %ret = select i1 %c, i16 %m, i16 %n
1278  ret i16 %ret
1279}
1280
1281
1282define i8 @selectRR_ne_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
1283; CHECK-LABEL: selectRR_ne_i8:
1284; CHECK:       # %bb.0: # %entry
1285; CHECK-NEXT:    zextb16 a0, a0
1286; CHECK-NEXT:    zextb16 a1, a1
1287; CHECK-NEXT:    cmpne16 a1, a0
1288; CHECK-NEXT:    movt32 a2, a3
1289; CHECK-NEXT:    mov16 a0, a2
1290; CHECK-NEXT:    rts16
1291;
1292; GENERIC-LABEL: selectRR_ne_i8:
1293; GENERIC:       # %bb.0: # %entry
1294; GENERIC-NEXT:    subi16 sp, sp, 4
1295; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1296; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1297; GENERIC-NEXT:    .cfi_offset l0, -4
1298; GENERIC-NEXT:    subi16 sp, sp, 4
1299; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1300; GENERIC-NEXT:    movi16 l0, 255
1301; GENERIC-NEXT:    and16 a0, l0
1302; GENERIC-NEXT:    and16 a1, l0
1303; GENERIC-NEXT:    cmpne16 a1, a0
1304; GENERIC-NEXT:    mvcv16 a0
1305; GENERIC-NEXT:    movi16 a1, 1
1306; GENERIC-NEXT:    subu16 a1, a0
1307; GENERIC-NEXT:    btsti16 a1, 0
1308; GENERIC-NEXT:    bt16 .LBB32_2
1309; GENERIC-NEXT:  # %bb.1: # %entry
1310; GENERIC-NEXT:    mov16 a3, a2
1311; GENERIC-NEXT:  .LBB32_2: # %entry
1312; GENERIC-NEXT:    mov16 a0, a3
1313; GENERIC-NEXT:    addi16 sp, sp, 4
1314; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1315; GENERIC-NEXT:    addi16 sp, sp, 4
1316; GENERIC-NEXT:    rts16
1317entry:
1318  %icmp = icmp ne i8 %y, %x
1319  %ret = select i1 %icmp, i8 %m, i8 %n
1320  ret i8 %ret
1321}
1322
1323define i8 @selectRI_ne_i8(i8 %x, i8 %n, i8 %m) {
1324; CHECK-LABEL: selectRI_ne_i8:
1325; CHECK:       # %bb.0: # %entry
1326; CHECK-NEXT:    zextb16 a0, a0
1327; CHECK-NEXT:    cmpnei16 a0, 10
1328; CHECK-NEXT:    movt32 a1, a2
1329; CHECK-NEXT:    mov16 a0, a1
1330; CHECK-NEXT:    rts16
1331;
1332; GENERIC-LABEL: selectRI_ne_i8:
1333; GENERIC:       # %bb.0: # %entry
1334; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1335; GENERIC-NEXT:    subi16 sp, sp, 4
1336; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1337; GENERIC-NEXT:    movi16 a3, 255
1338; GENERIC-NEXT:    and16 a3, a0
1339; GENERIC-NEXT:    cmpnei16 a3, 10
1340; GENERIC-NEXT:    mvcv16 a0
1341; GENERIC-NEXT:    movi16 a3, 1
1342; GENERIC-NEXT:    subu16 a3, a0
1343; GENERIC-NEXT:    btsti16 a3, 0
1344; GENERIC-NEXT:    bt16 .LBB33_2
1345; GENERIC-NEXT:  # %bb.1: # %entry
1346; GENERIC-NEXT:    mov16 a2, a1
1347; GENERIC-NEXT:  .LBB33_2: # %entry
1348; GENERIC-NEXT:    mov16 a0, a2
1349; GENERIC-NEXT:    addi16 sp, sp, 4
1350; GENERIC-NEXT:    rts16
1351entry:
1352  %icmp = icmp ne i8 %x, 10
1353  %ret = select i1 %icmp, i8 %m, i8 %n
1354  ret i8 %ret
1355}
1356
1357define i8 @selectRX_ne_i8(i8 %x, i8 %n, i8 %m) {
1358; CHECK-LABEL: selectRX_ne_i8:
1359; CHECK:       # %bb.0: # %entry
1360; CHECK-NEXT:    zextb16 a0, a0
1361; CHECK-NEXT:    cmpnei32 a0, 241
1362; CHECK-NEXT:    movt32 a1, a2
1363; CHECK-NEXT:    mov16 a0, a1
1364; CHECK-NEXT:    rts16
1365;
1366; GENERIC-LABEL: selectRX_ne_i8:
1367; GENERIC:       # %bb.0: # %entry
1368; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1369; GENERIC-NEXT:    subi16 sp, sp, 4
1370; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1371; GENERIC-NEXT:    movi16 a3, 255
1372; GENERIC-NEXT:    and16 a3, a0
1373; GENERIC-NEXT:    movi16 a0, 241
1374; GENERIC-NEXT:    cmpne16 a3, a0
1375; GENERIC-NEXT:    mvcv16 a0
1376; GENERIC-NEXT:    movi16 a3, 1
1377; GENERIC-NEXT:    subu16 a3, a0
1378; GENERIC-NEXT:    btsti16 a3, 0
1379; GENERIC-NEXT:    bt16 .LBB34_2
1380; GENERIC-NEXT:  # %bb.1: # %entry
1381; GENERIC-NEXT:    mov16 a2, a1
1382; GENERIC-NEXT:  .LBB34_2: # %entry
1383; GENERIC-NEXT:    mov16 a0, a2
1384; GENERIC-NEXT:    addi16 sp, sp, 4
1385; GENERIC-NEXT:    rts16
1386entry:
1387  %icmp = icmp ne i8 %x, 47777777
1388  %ret = select i1 %icmp, i8 %m, i8 %n
1389  ret i8 %ret
1390}
1391
1392define i8 @selectC_ne_i8(i1 %c, i8 %n, i8 %m) {
1393; CHECK-LABEL: selectC_ne_i8:
1394; CHECK:       # %bb.0: # %entry
1395; CHECK-NEXT:    btsti32 a0, 0
1396; CHECK-NEXT:    movt32 a1, a2
1397; CHECK-NEXT:    mov16 a0, a1
1398; CHECK-NEXT:    rts16
1399;
1400; GENERIC-LABEL: selectC_ne_i8:
1401; GENERIC:       # %bb.0: # %entry
1402; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1403; GENERIC-NEXT:    subi16 sp, sp, 4
1404; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1405; GENERIC-NEXT:    btsti16 a0, 0
1406; GENERIC-NEXT:    bt16 .LBB35_2
1407; GENERIC-NEXT:  # %bb.1: # %entry
1408; GENERIC-NEXT:    mov16 a2, a1
1409; GENERIC-NEXT:  .LBB35_2: # %entry
1410; GENERIC-NEXT:    mov16 a0, a2
1411; GENERIC-NEXT:    addi16 sp, sp, 4
1412; GENERIC-NEXT:    rts16
1413entry:
1414  %ret = select i1 %c, i8 %m, i8 %n
1415  ret i8 %ret
1416}
1417
1418
1419define i1 @selectRR_ne_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
1420; CHECK-LABEL: selectRR_ne_i1:
1421; CHECK:       # %bb.0: # %entry
1422; CHECK-NEXT:    xor16 a0, a1
1423; CHECK-NEXT:    btsti32 a0, 0
1424; CHECK-NEXT:    movt32 a2, a3
1425; CHECK-NEXT:    mov16 a0, a2
1426; CHECK-NEXT:    rts16
1427;
1428; GENERIC-LABEL: selectRR_ne_i1:
1429; GENERIC:       # %bb.0: # %entry
1430; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1431; GENERIC-NEXT:    subi16 sp, sp, 4
1432; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1433; GENERIC-NEXT:    xor16 a0, a1
1434; GENERIC-NEXT:    btsti16 a0, 0
1435; GENERIC-NEXT:    bt16 .LBB36_2
1436; GENERIC-NEXT:  # %bb.1: # %entry
1437; GENERIC-NEXT:    mov16 a3, a2
1438; GENERIC-NEXT:  .LBB36_2: # %entry
1439; GENERIC-NEXT:    mov16 a0, a3
1440; GENERIC-NEXT:    addi16 sp, sp, 4
1441; GENERIC-NEXT:    rts16
1442entry:
1443  %icmp = icmp ne i1 %y, %x
1444  %ret = select i1 %icmp, i1 %m, i1 %n
1445  ret i1 %ret
1446}
1447
1448define i1 @selectRI_ne_i1(i1 %x, i1 %n, i1 %m) {
1449; CHECK-LABEL: selectRI_ne_i1:
1450; CHECK:       # %bb.0: # %entry
1451; CHECK-NEXT:    btsti32 a0, 0
1452; CHECK-NEXT:    movt32 a1, a2
1453; CHECK-NEXT:    mov16 a0, a1
1454; CHECK-NEXT:    rts16
1455;
1456; GENERIC-LABEL: selectRI_ne_i1:
1457; GENERIC:       # %bb.0: # %entry
1458; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1459; GENERIC-NEXT:    subi16 sp, sp, 4
1460; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1461; GENERIC-NEXT:    btsti16 a0, 0
1462; GENERIC-NEXT:    bt16 .LBB37_2
1463; GENERIC-NEXT:  # %bb.1: # %entry
1464; GENERIC-NEXT:    mov16 a2, a1
1465; GENERIC-NEXT:  .LBB37_2: # %entry
1466; GENERIC-NEXT:    mov16 a0, a2
1467; GENERIC-NEXT:    addi16 sp, sp, 4
1468; GENERIC-NEXT:    rts16
1469entry:
1470  %icmp = icmp ne i1 %x, 10
1471  %ret = select i1 %icmp, i1 %m, i1 %n
1472  ret i1 %ret
1473}
1474
1475define i1 @selectRX_ne_i1(i1 %x, i1 %n, i1 %m) {
1476; CHECK-LABEL: selectRX_ne_i1:
1477; CHECK:       # %bb.0: # %entry
1478; CHECK-NEXT:    btsti32 a0, 0
1479; CHECK-NEXT:    movt32 a2, a1
1480; CHECK-NEXT:    mov16 a0, a2
1481; CHECK-NEXT:    rts16
1482;
1483; GENERIC-LABEL: selectRX_ne_i1:
1484; GENERIC:       # %bb.0: # %entry
1485; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1486; GENERIC-NEXT:    subi16 sp, sp, 4
1487; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1488; GENERIC-NEXT:    btsti16 a0, 0
1489; GENERIC-NEXT:    bt16 .LBB38_2
1490; GENERIC-NEXT:  # %bb.1: # %entry
1491; GENERIC-NEXT:    mov16 a1, a2
1492; GENERIC-NEXT:  .LBB38_2: # %entry
1493; GENERIC-NEXT:    mov16 a0, a1
1494; GENERIC-NEXT:    addi16 sp, sp, 4
1495; GENERIC-NEXT:    rts16
1496entry:
1497  %icmp = icmp ne i1 %x, 47777777
1498  %ret = select i1 %icmp, i1 %m, i1 %n
1499  ret i1 %ret
1500}
1501
1502define i1 @selectC_ne_i1(i1 %c, i1 %n, i1 %m) {
1503; CHECK-LABEL: selectC_ne_i1:
1504; CHECK:       # %bb.0: # %entry
1505; CHECK-NEXT:    btsti32 a0, 0
1506; CHECK-NEXT:    movt32 a1, a2
1507; CHECK-NEXT:    mov16 a0, a1
1508; CHECK-NEXT:    rts16
1509;
1510; GENERIC-LABEL: selectC_ne_i1:
1511; GENERIC:       # %bb.0: # %entry
1512; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1513; GENERIC-NEXT:    subi16 sp, sp, 4
1514; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1515; GENERIC-NEXT:    btsti16 a0, 0
1516; GENERIC-NEXT:    bt16 .LBB39_2
1517; GENERIC-NEXT:  # %bb.1: # %entry
1518; GENERIC-NEXT:    mov16 a2, a1
1519; GENERIC-NEXT:  .LBB39_2: # %entry
1520; GENERIC-NEXT:    mov16 a0, a2
1521; GENERIC-NEXT:    addi16 sp, sp, 4
1522; GENERIC-NEXT:    rts16
1523entry:
1524  %ret = select i1 %c, i1 %m, i1 %n
1525  ret i1 %ret
1526}
1527
1528
1529define i32 @selectRR_ugt_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
1530; CHECK-LABEL: selectRR_ugt_i32:
1531; CHECK:       # %bb.0: # %entry
1532; CHECK-NEXT:    cmphs16 a0, a1
1533; CHECK-NEXT:    movf32 a2, a3
1534; CHECK-NEXT:    mov16 a0, a2
1535; CHECK-NEXT:    rts16
1536;
1537; GENERIC-LABEL: selectRR_ugt_i32:
1538; GENERIC:       # %bb.0: # %entry
1539; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1540; GENERIC-NEXT:    subi16 sp, sp, 4
1541; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1542; GENERIC-NEXT:    cmphs16 a0, a1
1543; GENERIC-NEXT:    mvcv16 a0
1544; GENERIC-NEXT:    btsti16 a0, 0
1545; GENERIC-NEXT:    bt16 .LBB40_2
1546; GENERIC-NEXT:  # %bb.1: # %entry
1547; GENERIC-NEXT:    mov16 a3, a2
1548; GENERIC-NEXT:  .LBB40_2: # %entry
1549; GENERIC-NEXT:    mov16 a0, a3
1550; GENERIC-NEXT:    addi16 sp, sp, 4
1551; GENERIC-NEXT:    rts16
1552entry:
1553  %icmp = icmp ugt i32 %y, %x
1554  %ret = select i1 %icmp, i32 %m, i32 %n
1555  ret i32 %ret
1556}
1557
1558define i32 @selectRI_ugt_i32(i32 %x, i32 %n, i32 %m) {
1559; CHECK-LABEL: selectRI_ugt_i32:
1560; CHECK:       # %bb.0: # %entry
1561; CHECK-NEXT:    movi16 a3, 10
1562; CHECK-NEXT:    cmphs16 a3, a0
1563; CHECK-NEXT:    movf32 a1, a2
1564; CHECK-NEXT:    mov16 a0, a1
1565; CHECK-NEXT:    rts16
1566;
1567; GENERIC-LABEL: selectRI_ugt_i32:
1568; GENERIC:       # %bb.0: # %entry
1569; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1570; GENERIC-NEXT:    subi16 sp, sp, 4
1571; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1572; GENERIC-NEXT:    movi16 a3, 10
1573; GENERIC-NEXT:    cmphs16 a3, a0
1574; GENERIC-NEXT:    mvcv16 a0
1575; GENERIC-NEXT:    btsti16 a0, 0
1576; GENERIC-NEXT:    bt16 .LBB41_2
1577; GENERIC-NEXT:  # %bb.1: # %entry
1578; GENERIC-NEXT:    mov16 a2, a1
1579; GENERIC-NEXT:  .LBB41_2: # %entry
1580; GENERIC-NEXT:    mov16 a0, a2
1581; GENERIC-NEXT:    addi16 sp, sp, 4
1582; GENERIC-NEXT:    rts16
1583entry:
1584  %icmp = icmp ugt i32 %x, 10
1585  %ret = select i1 %icmp, i32 %m, i32 %n
1586  ret i32 %ret
1587}
1588
1589define i32 @selectRX_ugt_i32(i32 %x, i32 %n, i32 %m) {
1590; CHECK-LABEL: selectRX_ugt_i32:
1591; CHECK:       # %bb.0: # %entry
1592; CHECK-NEXT:    movih32 a3, 729
1593; CHECK-NEXT:    ori32 a3, a3, 2033
1594; CHECK-NEXT:    cmphs16 a3, a0
1595; CHECK-NEXT:    movf32 a1, a2
1596; CHECK-NEXT:    mov16 a0, a1
1597; CHECK-NEXT:    rts16
1598;
1599; GENERIC-LABEL: selectRX_ugt_i32:
1600; GENERIC:       # %bb.0: # %entry
1601; GENERIC-NEXT:    subi16 sp, sp, 4
1602; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1603; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1604; GENERIC-NEXT:    .cfi_offset l0, -4
1605; GENERIC-NEXT:    subi16 sp, sp, 4
1606; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1607; GENERIC-NEXT:    movi16 a3, 2
1608; GENERIC-NEXT:    lsli16 a3, a3, 24
1609; GENERIC-NEXT:    movi16 l0, 217
1610; GENERIC-NEXT:    lsli16 l0, l0, 16
1611; GENERIC-NEXT:    or16 l0, a3
1612; GENERIC-NEXT:    movi16 a3, 7
1613; GENERIC-NEXT:    lsli16 a3, a3, 8
1614; GENERIC-NEXT:    or16 a3, l0
1615; GENERIC-NEXT:    movi16 l0, 241
1616; GENERIC-NEXT:    or16 l0, a3
1617; GENERIC-NEXT:    cmphs16 l0, a0
1618; GENERIC-NEXT:    mvcv16 a0
1619; GENERIC-NEXT:    btsti16 a0, 0
1620; GENERIC-NEXT:    bt16 .LBB42_2
1621; GENERIC-NEXT:  # %bb.1: # %entry
1622; GENERIC-NEXT:    mov16 a2, a1
1623; GENERIC-NEXT:  .LBB42_2: # %entry
1624; GENERIC-NEXT:    mov16 a0, a2
1625; GENERIC-NEXT:    addi16 sp, sp, 4
1626; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1627; GENERIC-NEXT:    addi16 sp, sp, 4
1628; GENERIC-NEXT:    rts16
1629entry:
1630  %icmp = icmp ugt i32 %x, 47777777
1631  %ret = select i1 %icmp, i32 %m, i32 %n
1632  ret i32 %ret
1633}
1634
1635define i32 @selectC_ugt_i32(i1 %c, i32 %n, i32 %m) {
1636; CHECK-LABEL: selectC_ugt_i32:
1637; CHECK:       # %bb.0: # %entry
1638; CHECK-NEXT:    btsti32 a0, 0
1639; CHECK-NEXT:    movt32 a1, a2
1640; CHECK-NEXT:    mov16 a0, a1
1641; CHECK-NEXT:    rts16
1642;
1643; GENERIC-LABEL: selectC_ugt_i32:
1644; GENERIC:       # %bb.0: # %entry
1645; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1646; GENERIC-NEXT:    subi16 sp, sp, 4
1647; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1648; GENERIC-NEXT:    btsti16 a0, 0
1649; GENERIC-NEXT:    bt16 .LBB43_2
1650; GENERIC-NEXT:  # %bb.1: # %entry
1651; GENERIC-NEXT:    mov16 a2, a1
1652; GENERIC-NEXT:  .LBB43_2: # %entry
1653; GENERIC-NEXT:    mov16 a0, a2
1654; GENERIC-NEXT:    addi16 sp, sp, 4
1655; GENERIC-NEXT:    rts16
1656entry:
1657  %ret = select i1 %c, i32 %m, i32 %n
1658  ret i32 %ret
1659}
1660
1661define i64 @selectRR_ugt_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
1662; CHECK-LABEL: selectRR_ugt_i64:
1663; CHECK:       # %bb.0: # %entry
1664; CHECK-NEXT:    .cfi_def_cfa_offset 0
1665; CHECK-NEXT:    subi16 sp, sp, 8
1666; CHECK-NEXT:    .cfi_def_cfa_offset 8
1667; CHECK-NEXT:    cmpne16 a3, a1
1668; CHECK-NEXT:    mvc32 t0
1669; CHECK-NEXT:    st32.w t0, (sp, 4)
1670; CHECK-NEXT:    cmphs16 a1, a3
1671; CHECK-NEXT:    mvcv16 a1
1672; CHECK-NEXT:    cmphs16 a0, a2
1673; CHECK-NEXT:    mvcv16 a0
1674; CHECK-NEXT:    ld16.w a2, (sp, 4)
1675; CHECK-NEXT:    btsti32 a2, 0
1676; CHECK-NEXT:    movf32 a1, a0
1677; CHECK-NEXT:    addi16 a2, sp, 8
1678; CHECK-NEXT:    addi16 a0, sp, 16
1679; CHECK-NEXT:    btsti32 a1, 0
1680; CHECK-NEXT:    movt32 a2, a0
1681; CHECK-NEXT:    ld16.w a0, (a2, 0)
1682; CHECK-NEXT:    ld16.w a1, (a2, 4)
1683; CHECK-NEXT:    addi16 sp, sp, 8
1684; CHECK-NEXT:    rts16
1685;
1686; GENERIC-LABEL: selectRR_ugt_i64:
1687; GENERIC:       # %bb.0: # %entry
1688; GENERIC-NEXT:    subi16 sp, sp, 4
1689; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1690; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1691; GENERIC-NEXT:    .cfi_offset l0, -4
1692; GENERIC-NEXT:    subi16 sp, sp, 4
1693; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1694; GENERIC-NEXT:    cmphs16 a1, a3
1695; GENERIC-NEXT:    mvcv16 l0
1696; GENERIC-NEXT:    cmphs16 a0, a2
1697; GENERIC-NEXT:    mvcv16 a0
1698; GENERIC-NEXT:    cmpne16 a3, a1
1699; GENERIC-NEXT:    mvcv16 a1
1700; GENERIC-NEXT:    btsti16 a1, 0
1701; GENERIC-NEXT:    bt16 .LBB44_2
1702; GENERIC-NEXT:  # %bb.1: # %entry
1703; GENERIC-NEXT:    mov16 a0, l0
1704; GENERIC-NEXT:  .LBB44_2: # %entry
1705; GENERIC-NEXT:    btsti16 a0, 0
1706; GENERIC-NEXT:    bt16 .LBB44_4
1707; GENERIC-NEXT:  # %bb.3: # %entry
1708; GENERIC-NEXT:    movi16 a0, 8
1709; GENERIC-NEXT:    br32 .LBB44_5
1710; GENERIC-NEXT:  .LBB44_4:
1711; GENERIC-NEXT:    movi16 a0, 16
1712; GENERIC-NEXT:  .LBB44_5: # %entry
1713; GENERIC-NEXT:    addu16 a0, sp
1714; GENERIC-NEXT:    mov16 a1, a0
1715; GENERIC-NEXT:    ld16.w a0, (a0, 0)
1716; GENERIC-NEXT:    ld16.w a1, (a1, 4)
1717; GENERIC-NEXT:    addi16 sp, sp, 4
1718; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1719; GENERIC-NEXT:    addi16 sp, sp, 4
1720; GENERIC-NEXT:    rts16
1721entry:
1722  %icmp = icmp ugt i64 %y, %x
1723  %ret = select i1 %icmp, i64 %m, i64 %n
1724  ret i64 %ret
1725}
1726
1727define i64 @selectRI_ugt_i64(i64 %x, i64 %n, i64 %m) {
1728; CHECK-LABEL: selectRI_ugt_i64:
1729; CHECK:       # %bb.0: # %entry
1730; CHECK-NEXT:    subi16 sp, sp, 4
1731; CHECK-NEXT:    .cfi_def_cfa_offset 4
1732; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1733; CHECK-NEXT:    .cfi_offset l0, -4
1734; CHECK-NEXT:    .cfi_def_cfa_offset 4
1735; CHECK-NEXT:    ld32.w t0, (sp, 8)
1736; CHECK-NEXT:    ld32.w t1, (sp, 4)
1737; CHECK-NEXT:    movi16 l0, 10
1738; CHECK-NEXT:    cmphs16 l0, a0
1739; CHECK-NEXT:    mvcv16 a0
1740; CHECK-NEXT:    cmpnei16 a1, 0
1741; CHECK-NEXT:    mvc32 a1
1742; CHECK-NEXT:    movf32 a1, a0
1743; CHECK-NEXT:    btsti32 a1, 0
1744; CHECK-NEXT:    movt32 a2, t1
1745; CHECK-NEXT:    movt32 a3, t0
1746; CHECK-NEXT:    mov16 a0, a2
1747; CHECK-NEXT:    mov16 a1, a3
1748; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1749; CHECK-NEXT:    addi16 sp, sp, 4
1750; CHECK-NEXT:    rts16
1751;
1752; GENERIC-LABEL: selectRI_ugt_i64:
1753; GENERIC:       # %bb.0: # %entry
1754; GENERIC-NEXT:    subi16 sp, sp, 4
1755; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1756; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1757; GENERIC-NEXT:    .cfi_offset l0, -4
1758; GENERIC-NEXT:    subi16 sp, sp, 4
1759; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1760; GENERIC-NEXT:    cmpnei16 a1, 0
1761; GENERIC-NEXT:    mvcv16 a1
1762; GENERIC-NEXT:    movi16 l0, 10
1763; GENERIC-NEXT:    cmphs16 l0, a0
1764; GENERIC-NEXT:    mvcv16 a0
1765; GENERIC-NEXT:    btsti16 a1, 0
1766; GENERIC-NEXT:    bf16 .LBB45_5
1767; GENERIC-NEXT:  # %bb.1: # %entry
1768; GENERIC-NEXT:    btsti16 a0, 0
1769; GENERIC-NEXT:    bt16 .LBB45_6
1770; GENERIC-NEXT:  .LBB45_2: # %entry
1771; GENERIC-NEXT:    btsti16 a0, 0
1772; GENERIC-NEXT:    bf16 .LBB45_4
1773; GENERIC-NEXT:  .LBB45_3:
1774; GENERIC-NEXT:    ld16.w a3, (sp, 12)
1775; GENERIC-NEXT:  .LBB45_4: # %entry
1776; GENERIC-NEXT:    mov16 a0, a2
1777; GENERIC-NEXT:    mov16 a1, a3
1778; GENERIC-NEXT:    addi16 sp, sp, 4
1779; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1780; GENERIC-NEXT:    addi16 sp, sp, 4
1781; GENERIC-NEXT:    rts16
1782; GENERIC-NEXT:  .LBB45_5: # %entry
1783; GENERIC-NEXT:    movi16 a0, 1
1784; GENERIC-NEXT:    subu16 a0, a1
1785; GENERIC-NEXT:    btsti16 a0, 0
1786; GENERIC-NEXT:    bf16 .LBB45_2
1787; GENERIC-NEXT:  .LBB45_6:
1788; GENERIC-NEXT:    ld16.w a2, (sp, 8)
1789; GENERIC-NEXT:    btsti16 a0, 0
1790; GENERIC-NEXT:    bt16 .LBB45_3
1791; GENERIC-NEXT:    br32 .LBB45_4
1792entry:
1793  %icmp = icmp ugt i64 %x, 10
1794  %ret = select i1 %icmp, i64 %m, i64 %n
1795  ret i64 %ret
1796}
1797
1798define i64 @selectRX_ugt_i64(i64 %x, i64 %n, i64 %m) {
1799; CHECK-LABEL: selectRX_ugt_i64:
1800; CHECK:       # %bb.0: # %entry
1801; CHECK-NEXT:    subi16 sp, sp, 4
1802; CHECK-NEXT:    .cfi_def_cfa_offset 4
1803; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1804; CHECK-NEXT:    .cfi_offset l0, -4
1805; CHECK-NEXT:    .cfi_def_cfa_offset 4
1806; CHECK-NEXT:    ld32.w t0, (sp, 8)
1807; CHECK-NEXT:    ld32.w t1, (sp, 4)
1808; CHECK-NEXT:    movih32 l0, 729
1809; CHECK-NEXT:    ori32 l0, l0, 2033
1810; CHECK-NEXT:    cmphs16 l0, a0
1811; CHECK-NEXT:    mvcv16 a0
1812; CHECK-NEXT:    cmpnei16 a1, 0
1813; CHECK-NEXT:    mvc32 a1
1814; CHECK-NEXT:    movf32 a1, a0
1815; CHECK-NEXT:    btsti32 a1, 0
1816; CHECK-NEXT:    movt32 a2, t1
1817; CHECK-NEXT:    movt32 a3, t0
1818; CHECK-NEXT:    mov16 a0, a2
1819; CHECK-NEXT:    mov16 a1, a3
1820; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1821; CHECK-NEXT:    addi16 sp, sp, 4
1822; CHECK-NEXT:    rts16
1823;
1824; GENERIC-LABEL: selectRX_ugt_i64:
1825; GENERIC:       # %bb.0: # %entry
1826; GENERIC-NEXT:    subi16 sp, sp, 8
1827; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1828; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1829; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1830; GENERIC-NEXT:    .cfi_offset l1, -4
1831; GENERIC-NEXT:    .cfi_offset l0, -8
1832; GENERIC-NEXT:    subi16 sp, sp, 4
1833; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1834; GENERIC-NEXT:    cmpnei16 a1, 0
1835; GENERIC-NEXT:    mvcv16 a1
1836; GENERIC-NEXT:    movi16 l0, 2
1837; GENERIC-NEXT:    lsli16 l0, l0, 24
1838; GENERIC-NEXT:    movi16 l1, 217
1839; GENERIC-NEXT:    lsli16 l1, l1, 16
1840; GENERIC-NEXT:    or16 l1, l0
1841; GENERIC-NEXT:    movi16 l0, 7
1842; GENERIC-NEXT:    lsli16 l0, l0, 8
1843; GENERIC-NEXT:    or16 l0, l1
1844; GENERIC-NEXT:    movi16 l1, 241
1845; GENERIC-NEXT:    or16 l1, l0
1846; GENERIC-NEXT:    cmphs16 l1, a0
1847; GENERIC-NEXT:    mvcv16 a0
1848; GENERIC-NEXT:    btsti16 a1, 0
1849; GENERIC-NEXT:    bf16 .LBB46_5
1850; GENERIC-NEXT:  # %bb.1: # %entry
1851; GENERIC-NEXT:    btsti16 a0, 0
1852; GENERIC-NEXT:    bt16 .LBB46_6
1853; GENERIC-NEXT:  .LBB46_2: # %entry
1854; GENERIC-NEXT:    btsti16 a0, 0
1855; GENERIC-NEXT:    bf16 .LBB46_4
1856; GENERIC-NEXT:  .LBB46_3:
1857; GENERIC-NEXT:    ld16.w a3, (sp, 16)
1858; GENERIC-NEXT:  .LBB46_4: # %entry
1859; GENERIC-NEXT:    mov16 a0, a2
1860; GENERIC-NEXT:    mov16 a1, a3
1861; GENERIC-NEXT:    addi16 sp, sp, 4
1862; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1863; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1864; GENERIC-NEXT:    addi16 sp, sp, 8
1865; GENERIC-NEXT:    rts16
1866; GENERIC-NEXT:  .LBB46_5: # %entry
1867; GENERIC-NEXT:    movi16 a0, 1
1868; GENERIC-NEXT:    subu16 a0, a1
1869; GENERIC-NEXT:    btsti16 a0, 0
1870; GENERIC-NEXT:    bf16 .LBB46_2
1871; GENERIC-NEXT:  .LBB46_6:
1872; GENERIC-NEXT:    ld16.w a2, (sp, 12)
1873; GENERIC-NEXT:    btsti16 a0, 0
1874; GENERIC-NEXT:    bt16 .LBB46_3
1875; GENERIC-NEXT:    br32 .LBB46_4
1876entry:
1877  %icmp = icmp ugt i64 %x, 47777777
1878  %ret = select i1 %icmp, i64 %m, i64 %n
1879  ret i64 %ret
1880}
1881
1882define i64 @selectC_ugt_i64(i1 %c, i64 %n, i64 %m) {
1883; CHECK-LABEL: selectC_ugt_i64:
1884; CHECK:       # %bb.0: # %entry
1885; CHECK-NEXT:    ld32.w t0, (sp, 0)
1886; CHECK-NEXT:    btsti32 a0, 0
1887; CHECK-NEXT:    movt32 a1, a3
1888; CHECK-NEXT:    movt32 a2, t0
1889; CHECK-NEXT:    mov16 a0, a1
1890; CHECK-NEXT:    mov16 a1, a2
1891; CHECK-NEXT:    rts16
1892;
1893; GENERIC-LABEL: selectC_ugt_i64:
1894; GENERIC:       # %bb.0: # %entry
1895; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1896; GENERIC-NEXT:    subi16 sp, sp, 4
1897; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1898; GENERIC-NEXT:    btsti16 a0, 0
1899; GENERIC-NEXT:    bt16 .LBB47_2
1900; GENERIC-NEXT:  # %bb.1: # %entry
1901; GENERIC-NEXT:    mov16 a3, a1
1902; GENERIC-NEXT:  .LBB47_2: # %entry
1903; GENERIC-NEXT:    btsti16 a0, 0
1904; GENERIC-NEXT:    bf16 .LBB47_4
1905; GENERIC-NEXT:  # %bb.3:
1906; GENERIC-NEXT:    ld16.w a2, (sp, 4)
1907; GENERIC-NEXT:  .LBB47_4: # %entry
1908; GENERIC-NEXT:    mov16 a0, a3
1909; GENERIC-NEXT:    mov16 a1, a2
1910; GENERIC-NEXT:    addi16 sp, sp, 4
1911; GENERIC-NEXT:    rts16
1912entry:
1913  %ret = select i1 %c, i64 %m, i64 %n
1914  ret i64 %ret
1915}
1916
1917
1918define i16 @selectRR_ugt_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
1919; CHECK-LABEL: selectRR_ugt_i16:
1920; CHECK:       # %bb.0: # %entry
1921; CHECK-NEXT:    zexth16 a1, a1
1922; CHECK-NEXT:    zexth16 a0, a0
1923; CHECK-NEXT:    cmphs16 a0, a1
1924; CHECK-NEXT:    movf32 a2, a3
1925; CHECK-NEXT:    mov16 a0, a2
1926; CHECK-NEXT:    rts16
1927;
1928; GENERIC-LABEL: selectRR_ugt_i16:
1929; GENERIC:       # %bb.0: # %entry
1930; GENERIC-NEXT:    subi16 sp, sp, 12
1931; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1932; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
1933; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1934; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1935; GENERIC-NEXT:    .cfi_offset l2, -4
1936; GENERIC-NEXT:    .cfi_offset l1, -8
1937; GENERIC-NEXT:    .cfi_offset l0, -12
1938; GENERIC-NEXT:    subi16 sp, sp, 4
1939; GENERIC-NEXT:    .cfi_def_cfa_offset 16
1940; GENERIC-NEXT:    movi16 l0, 0
1941; GENERIC-NEXT:    lsli16 l1, l0, 24
1942; GENERIC-NEXT:    lsli16 l0, l0, 16
1943; GENERIC-NEXT:    or16 l0, l1
1944; GENERIC-NEXT:    movi16 l1, 255
1945; GENERIC-NEXT:    lsli16 l2, l1, 8
1946; GENERIC-NEXT:    or16 l2, l0
1947; GENERIC-NEXT:    or16 l2, l1
1948; GENERIC-NEXT:    and16 a1, l2
1949; GENERIC-NEXT:    and16 l2, a0
1950; GENERIC-NEXT:    cmphs16 l2, a1
1951; GENERIC-NEXT:    mvcv16 a0
1952; GENERIC-NEXT:    btsti16 a0, 0
1953; GENERIC-NEXT:    bt16 .LBB48_2
1954; GENERIC-NEXT:  # %bb.1: # %entry
1955; GENERIC-NEXT:    mov16 a3, a2
1956; GENERIC-NEXT:  .LBB48_2: # %entry
1957; GENERIC-NEXT:    mov16 a0, a3
1958; GENERIC-NEXT:    addi16 sp, sp, 4
1959; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1960; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1961; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
1962; GENERIC-NEXT:    addi16 sp, sp, 12
1963; GENERIC-NEXT:    rts16
1964entry:
1965  %icmp = icmp ugt i16 %y, %x
1966  %ret = select i1 %icmp, i16 %m, i16 %n
1967  ret i16 %ret
1968}
1969
1970define i16 @selectRI_ugt_i16(i16 %x, i16 %n, i16 %m) {
1971; CHECK-LABEL: selectRI_ugt_i16:
1972; CHECK:       # %bb.0: # %entry
1973; CHECK-NEXT:    zexth16 a0, a0
1974; CHECK-NEXT:    movi16 a3, 10
1975; CHECK-NEXT:    cmphs16 a3, a0
1976; CHECK-NEXT:    movf32 a1, a2
1977; CHECK-NEXT:    mov16 a0, a1
1978; CHECK-NEXT:    rts16
1979;
1980; GENERIC-LABEL: selectRI_ugt_i16:
1981; GENERIC:       # %bb.0: # %entry
1982; GENERIC-NEXT:    subi16 sp, sp, 8
1983; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1984; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1985; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1986; GENERIC-NEXT:    .cfi_offset l1, -4
1987; GENERIC-NEXT:    .cfi_offset l0, -8
1988; GENERIC-NEXT:    subi16 sp, sp, 4
1989; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1990; GENERIC-NEXT:    movi16 a3, 0
1991; GENERIC-NEXT:    lsli16 l0, a3, 24
1992; GENERIC-NEXT:    lsli16 a3, a3, 16
1993; GENERIC-NEXT:    or16 a3, l0
1994; GENERIC-NEXT:    movi16 l0, 255
1995; GENERIC-NEXT:    lsli16 l1, l0, 8
1996; GENERIC-NEXT:    or16 l1, a3
1997; GENERIC-NEXT:    or16 l1, l0
1998; GENERIC-NEXT:    and16 l1, a0
1999; GENERIC-NEXT:    movi16 a0, 10
2000; GENERIC-NEXT:    cmphs16 a0, l1
2001; GENERIC-NEXT:    mvcv16 a0
2002; GENERIC-NEXT:    btsti16 a0, 0
2003; GENERIC-NEXT:    bt16 .LBB49_2
2004; GENERIC-NEXT:  # %bb.1: # %entry
2005; GENERIC-NEXT:    mov16 a2, a1
2006; GENERIC-NEXT:  .LBB49_2: # %entry
2007; GENERIC-NEXT:    mov16 a0, a2
2008; GENERIC-NEXT:    addi16 sp, sp, 4
2009; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2010; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2011; GENERIC-NEXT:    addi16 sp, sp, 8
2012; GENERIC-NEXT:    rts16
2013entry:
2014  %icmp = icmp ugt i16 %x, 10
2015  %ret = select i1 %icmp, i16 %m, i16 %n
2016  ret i16 %ret
2017}
2018
2019define i16 @selectRX_ugt_i16(i16 %x, i16 %n, i16 %m) {
2020; CHECK-LABEL: selectRX_ugt_i16:
2021; CHECK:       # %bb.0: # %entry
2022; CHECK-NEXT:    zexth16 a0, a0
2023; CHECK-NEXT:    movi32 a3, 2033
2024; CHECK-NEXT:    cmphs16 a3, a0
2025; CHECK-NEXT:    movf32 a1, a2
2026; CHECK-NEXT:    mov16 a0, a1
2027; CHECK-NEXT:    rts16
2028;
2029; GENERIC-LABEL: selectRX_ugt_i16:
2030; GENERIC:       # %bb.0: # %entry
2031; GENERIC-NEXT:    subi16 sp, sp, 8
2032; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2033; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2034; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2035; GENERIC-NEXT:    .cfi_offset l1, -4
2036; GENERIC-NEXT:    .cfi_offset l0, -8
2037; GENERIC-NEXT:    subi16 sp, sp, 4
2038; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2039; GENERIC-NEXT:    movi16 a3, 0
2040; GENERIC-NEXT:    lsli16 l0, a3, 24
2041; GENERIC-NEXT:    lsli16 a3, a3, 16
2042; GENERIC-NEXT:    or16 a3, l0
2043; GENERIC-NEXT:    movi16 l0, 255
2044; GENERIC-NEXT:    lsli16 l1, l0, 8
2045; GENERIC-NEXT:    or16 l1, a3
2046; GENERIC-NEXT:    or16 l1, l0
2047; GENERIC-NEXT:    and16 l1, a0
2048; GENERIC-NEXT:    movi16 a0, 7
2049; GENERIC-NEXT:    lsli16 a0, a0, 8
2050; GENERIC-NEXT:    or16 a0, a3
2051; GENERIC-NEXT:    movi16 a3, 241
2052; GENERIC-NEXT:    or16 a3, a0
2053; GENERIC-NEXT:    cmphs16 a3, l1
2054; GENERIC-NEXT:    mvcv16 a0
2055; GENERIC-NEXT:    btsti16 a0, 0
2056; GENERIC-NEXT:    bt16 .LBB50_2
2057; GENERIC-NEXT:  # %bb.1: # %entry
2058; GENERIC-NEXT:    mov16 a2, a1
2059; GENERIC-NEXT:  .LBB50_2: # %entry
2060; GENERIC-NEXT:    mov16 a0, a2
2061; GENERIC-NEXT:    addi16 sp, sp, 4
2062; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2063; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2064; GENERIC-NEXT:    addi16 sp, sp, 8
2065; GENERIC-NEXT:    rts16
2066entry:
2067  %icmp = icmp ugt i16 %x, 47777777
2068  %ret = select i1 %icmp, i16 %m, i16 %n
2069  ret i16 %ret
2070}
2071
2072define i16 @selectC_ugt_i16(i1 %c, i16 %n, i16 %m) {
2073; CHECK-LABEL: selectC_ugt_i16:
2074; CHECK:       # %bb.0: # %entry
2075; CHECK-NEXT:    btsti32 a0, 0
2076; CHECK-NEXT:    movt32 a1, a2
2077; CHECK-NEXT:    mov16 a0, a1
2078; CHECK-NEXT:    rts16
2079;
2080; GENERIC-LABEL: selectC_ugt_i16:
2081; GENERIC:       # %bb.0: # %entry
2082; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2083; GENERIC-NEXT:    subi16 sp, sp, 4
2084; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2085; GENERIC-NEXT:    btsti16 a0, 0
2086; GENERIC-NEXT:    bt16 .LBB51_2
2087; GENERIC-NEXT:  # %bb.1: # %entry
2088; GENERIC-NEXT:    mov16 a2, a1
2089; GENERIC-NEXT:  .LBB51_2: # %entry
2090; GENERIC-NEXT:    mov16 a0, a2
2091; GENERIC-NEXT:    addi16 sp, sp, 4
2092; GENERIC-NEXT:    rts16
2093entry:
2094  %ret = select i1 %c, i16 %m, i16 %n
2095  ret i16 %ret
2096}
2097
2098
2099define i8 @selectRR_ugt_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
2100; CHECK-LABEL: selectRR_ugt_i8:
2101; CHECK:       # %bb.0: # %entry
2102; CHECK-NEXT:    zextb16 a1, a1
2103; CHECK-NEXT:    zextb16 a0, a0
2104; CHECK-NEXT:    cmphs16 a0, a1
2105; CHECK-NEXT:    movf32 a2, a3
2106; CHECK-NEXT:    mov16 a0, a2
2107; CHECK-NEXT:    rts16
2108;
2109; GENERIC-LABEL: selectRR_ugt_i8:
2110; GENERIC:       # %bb.0: # %entry
2111; GENERIC-NEXT:    subi16 sp, sp, 4
2112; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2113; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2114; GENERIC-NEXT:    .cfi_offset l0, -4
2115; GENERIC-NEXT:    subi16 sp, sp, 4
2116; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2117; GENERIC-NEXT:    movi16 l0, 255
2118; GENERIC-NEXT:    and16 a1, l0
2119; GENERIC-NEXT:    and16 a0, l0
2120; GENERIC-NEXT:    cmphs16 a0, a1
2121; GENERIC-NEXT:    mvcv16 a0
2122; GENERIC-NEXT:    btsti16 a0, 0
2123; GENERIC-NEXT:    bt16 .LBB52_2
2124; GENERIC-NEXT:  # %bb.1: # %entry
2125; GENERIC-NEXT:    mov16 a3, a2
2126; GENERIC-NEXT:  .LBB52_2: # %entry
2127; GENERIC-NEXT:    mov16 a0, a3
2128; GENERIC-NEXT:    addi16 sp, sp, 4
2129; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2130; GENERIC-NEXT:    addi16 sp, sp, 4
2131; GENERIC-NEXT:    rts16
2132entry:
2133  %icmp = icmp ugt i8 %y, %x
2134  %ret = select i1 %icmp, i8 %m, i8 %n
2135  ret i8 %ret
2136}
2137
2138define i8 @selectRI_ugt_i8(i8 %x, i8 %n, i8 %m) {
2139; CHECK-LABEL: selectRI_ugt_i8:
2140; CHECK:       # %bb.0: # %entry
2141; CHECK-NEXT:    zextb16 a0, a0
2142; CHECK-NEXT:    movi16 a3, 10
2143; CHECK-NEXT:    cmphs16 a3, a0
2144; CHECK-NEXT:    movf32 a1, a2
2145; CHECK-NEXT:    mov16 a0, a1
2146; CHECK-NEXT:    rts16
2147;
2148; GENERIC-LABEL: selectRI_ugt_i8:
2149; GENERIC:       # %bb.0: # %entry
2150; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2151; GENERIC-NEXT:    subi16 sp, sp, 4
2152; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2153; GENERIC-NEXT:    movi16 a3, 255
2154; GENERIC-NEXT:    and16 a3, a0
2155; GENERIC-NEXT:    movi16 a0, 10
2156; GENERIC-NEXT:    cmphs16 a0, a3
2157; GENERIC-NEXT:    mvcv16 a0
2158; GENERIC-NEXT:    btsti16 a0, 0
2159; GENERIC-NEXT:    bt16 .LBB53_2
2160; GENERIC-NEXT:  # %bb.1: # %entry
2161; GENERIC-NEXT:    mov16 a2, a1
2162; GENERIC-NEXT:  .LBB53_2: # %entry
2163; GENERIC-NEXT:    mov16 a0, a2
2164; GENERIC-NEXT:    addi16 sp, sp, 4
2165; GENERIC-NEXT:    rts16
2166entry:
2167  %icmp = icmp ugt i8 %x, 10
2168  %ret = select i1 %icmp, i8 %m, i8 %n
2169  ret i8 %ret
2170}
2171
2172define i8 @selectRX_ugt_i8(i8 %x, i8 %n, i8 %m) {
2173; CHECK-LABEL: selectRX_ugt_i8:
2174; CHECK:       # %bb.0: # %entry
2175; CHECK-NEXT:    zextb16 a0, a0
2176; CHECK-NEXT:    movi16 a3, 241
2177; CHECK-NEXT:    cmphs16 a3, a0
2178; CHECK-NEXT:    movf32 a1, a2
2179; CHECK-NEXT:    mov16 a0, a1
2180; CHECK-NEXT:    rts16
2181;
2182; GENERIC-LABEL: selectRX_ugt_i8:
2183; GENERIC:       # %bb.0: # %entry
2184; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2185; GENERIC-NEXT:    subi16 sp, sp, 4
2186; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2187; GENERIC-NEXT:    movi16 a3, 255
2188; GENERIC-NEXT:    and16 a3, a0
2189; GENERIC-NEXT:    movi16 a0, 241
2190; GENERIC-NEXT:    cmphs16 a0, a3
2191; GENERIC-NEXT:    mvcv16 a0
2192; GENERIC-NEXT:    btsti16 a0, 0
2193; GENERIC-NEXT:    bt16 .LBB54_2
2194; GENERIC-NEXT:  # %bb.1: # %entry
2195; GENERIC-NEXT:    mov16 a2, a1
2196; GENERIC-NEXT:  .LBB54_2: # %entry
2197; GENERIC-NEXT:    mov16 a0, a2
2198; GENERIC-NEXT:    addi16 sp, sp, 4
2199; GENERIC-NEXT:    rts16
2200entry:
2201  %icmp = icmp ugt i8 %x, 47777777
2202  %ret = select i1 %icmp, i8 %m, i8 %n
2203  ret i8 %ret
2204}
2205
2206define i8 @selectC_ugt_i8(i1 %c, i8 %n, i8 %m) {
2207; CHECK-LABEL: selectC_ugt_i8:
2208; CHECK:       # %bb.0: # %entry
2209; CHECK-NEXT:    btsti32 a0, 0
2210; CHECK-NEXT:    movt32 a1, a2
2211; CHECK-NEXT:    mov16 a0, a1
2212; CHECK-NEXT:    rts16
2213;
2214; GENERIC-LABEL: selectC_ugt_i8:
2215; GENERIC:       # %bb.0: # %entry
2216; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2217; GENERIC-NEXT:    subi16 sp, sp, 4
2218; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2219; GENERIC-NEXT:    btsti16 a0, 0
2220; GENERIC-NEXT:    bt16 .LBB55_2
2221; GENERIC-NEXT:  # %bb.1: # %entry
2222; GENERIC-NEXT:    mov16 a2, a1
2223; GENERIC-NEXT:  .LBB55_2: # %entry
2224; GENERIC-NEXT:    mov16 a0, a2
2225; GENERIC-NEXT:    addi16 sp, sp, 4
2226; GENERIC-NEXT:    rts16
2227entry:
2228  %ret = select i1 %c, i8 %m, i8 %n
2229  ret i8 %ret
2230}
2231
2232
2233define i1 @selectRR_ugt_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
2234; CHECK-LABEL: selectRR_ugt_i1:
2235; CHECK:       # %bb.0: # %entry
2236; CHECK-NEXT:    btsti32 a0, 0
2237; CHECK-NEXT:    movt32 a3, a2
2238; CHECK-NEXT:    btsti32 a1, 0
2239; CHECK-NEXT:    movt32 a2, a3
2240; CHECK-NEXT:    mov16 a0, a2
2241; CHECK-NEXT:    rts16
2242;
2243; GENERIC-LABEL: selectRR_ugt_i1:
2244; GENERIC:       # %bb.0: # %entry
2245; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2246; GENERIC-NEXT:    subi16 sp, sp, 4
2247; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2248; GENERIC-NEXT:    btsti16 a0, 0
2249; GENERIC-NEXT:    mov16 a0, a2
2250; GENERIC-NEXT:    bf16 .LBB56_3
2251; GENERIC-NEXT:  # %bb.1: # %entry
2252; GENERIC-NEXT:    btsti16 a1, 0
2253; GENERIC-NEXT:    bf16 .LBB56_4
2254; GENERIC-NEXT:  .LBB56_2: # %entry
2255; GENERIC-NEXT:    addi16 sp, sp, 4
2256; GENERIC-NEXT:    rts16
2257; GENERIC-NEXT:  .LBB56_3: # %entry
2258; GENERIC-NEXT:    mov16 a0, a3
2259; GENERIC-NEXT:    btsti16 a1, 0
2260; GENERIC-NEXT:    bt16 .LBB56_2
2261; GENERIC-NEXT:  .LBB56_4: # %entry
2262; GENERIC-NEXT:    mov16 a0, a2
2263; GENERIC-NEXT:    addi16 sp, sp, 4
2264; GENERIC-NEXT:    rts16
2265entry:
2266  %icmp = icmp ugt i1 %y, %x
2267  %ret = select i1 %icmp, i1 %m, i1 %n
2268  ret i1 %ret
2269}
2270
2271define i1 @selectRI_ugt_i1(i1 %x, i1 %n, i1 %m) {
2272; CHECK-LABEL: selectRI_ugt_i1:
2273; CHECK:       # %bb.0: # %entry
2274; CHECK-NEXT:    btsti32 a0, 0
2275; CHECK-NEXT:    movt32 a1, a2
2276; CHECK-NEXT:    mov16 a0, a1
2277; CHECK-NEXT:    rts16
2278;
2279; GENERIC-LABEL: selectRI_ugt_i1:
2280; GENERIC:       # %bb.0: # %entry
2281; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2282; GENERIC-NEXT:    subi16 sp, sp, 4
2283; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2284; GENERIC-NEXT:    btsti16 a0, 0
2285; GENERIC-NEXT:    bt16 .LBB57_2
2286; GENERIC-NEXT:  # %bb.1: # %entry
2287; GENERIC-NEXT:    mov16 a2, a1
2288; GENERIC-NEXT:  .LBB57_2: # %entry
2289; GENERIC-NEXT:    mov16 a0, a2
2290; GENERIC-NEXT:    addi16 sp, sp, 4
2291; GENERIC-NEXT:    rts16
2292entry:
2293  %icmp = icmp ugt i1 %x, 10
2294  %ret = select i1 %icmp, i1 %m, i1 %n
2295  ret i1 %ret
2296}
2297
2298define i1 @selectRX_ugt_i1(i1 %x, i1 %n, i1 %m) {
2299; CHECK-LABEL: selectRX_ugt_i1:
2300; CHECK:       # %bb.0: # %entry
2301; CHECK-NEXT:    mov16 a0, a1
2302; CHECK-NEXT:    rts16
2303;
2304; GENERIC-LABEL: selectRX_ugt_i1:
2305; GENERIC:       # %bb.0: # %entry
2306; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2307; GENERIC-NEXT:    subi16 sp, sp, 4
2308; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2309; GENERIC-NEXT:    mov16 a0, a1
2310; GENERIC-NEXT:    addi16 sp, sp, 4
2311; GENERIC-NEXT:    rts16
2312entry:
2313  %icmp = icmp ugt i1 %x, 47777777
2314  %ret = select i1 %icmp, i1 %m, i1 %n
2315  ret i1 %ret
2316}
2317
2318define i1 @selectC_ugt_i1(i1 %c, i1 %n, i1 %m) {
2319; CHECK-LABEL: selectC_ugt_i1:
2320; CHECK:       # %bb.0: # %entry
2321; CHECK-NEXT:    btsti32 a0, 0
2322; CHECK-NEXT:    movt32 a1, a2
2323; CHECK-NEXT:    mov16 a0, a1
2324; CHECK-NEXT:    rts16
2325;
2326; GENERIC-LABEL: selectC_ugt_i1:
2327; GENERIC:       # %bb.0: # %entry
2328; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2329; GENERIC-NEXT:    subi16 sp, sp, 4
2330; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2331; GENERIC-NEXT:    btsti16 a0, 0
2332; GENERIC-NEXT:    bt16 .LBB59_2
2333; GENERIC-NEXT:  # %bb.1: # %entry
2334; GENERIC-NEXT:    mov16 a2, a1
2335; GENERIC-NEXT:  .LBB59_2: # %entry
2336; GENERIC-NEXT:    mov16 a0, a2
2337; GENERIC-NEXT:    addi16 sp, sp, 4
2338; GENERIC-NEXT:    rts16
2339entry:
2340  %ret = select i1 %c, i1 %m, i1 %n
2341  ret i1 %ret
2342}
2343
2344
2345define i32 @selectRR_uge_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
2346; CHECK-LABEL: selectRR_uge_i32:
2347; CHECK:       # %bb.0: # %entry
2348; CHECK-NEXT:    cmphs16 a1, a0
2349; CHECK-NEXT:    movt32 a2, a3
2350; CHECK-NEXT:    mov16 a0, a2
2351; CHECK-NEXT:    rts16
2352;
2353; GENERIC-LABEL: selectRR_uge_i32:
2354; GENERIC:       # %bb.0: # %entry
2355; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2356; GENERIC-NEXT:    subi16 sp, sp, 4
2357; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2358; GENERIC-NEXT:    cmphs16 a1, a0
2359; GENERIC-NEXT:    mvcv16 a0
2360; GENERIC-NEXT:    movi16 a1, 1
2361; GENERIC-NEXT:    subu16 a1, a0
2362; GENERIC-NEXT:    btsti16 a1, 0
2363; GENERIC-NEXT:    bt16 .LBB60_2
2364; GENERIC-NEXT:  # %bb.1: # %entry
2365; GENERIC-NEXT:    mov16 a3, a2
2366; GENERIC-NEXT:  .LBB60_2: # %entry
2367; GENERIC-NEXT:    mov16 a0, a3
2368; GENERIC-NEXT:    addi16 sp, sp, 4
2369; GENERIC-NEXT:    rts16
2370entry:
2371  %icmp = icmp uge i32 %y, %x
2372  %ret = select i1 %icmp, i32 %m, i32 %n
2373  ret i32 %ret
2374}
2375
2376define i32 @selectRI_uge_i32(i32 %x, i32 %n, i32 %m) {
2377; CHECK-LABEL: selectRI_uge_i32:
2378; CHECK:       # %bb.0: # %entry
2379; CHECK-NEXT:    movi16 a3, 9
2380; CHECK-NEXT:    cmphs16 a3, a0
2381; CHECK-NEXT:    movf32 a1, a2
2382; CHECK-NEXT:    mov16 a0, a1
2383; CHECK-NEXT:    rts16
2384;
2385; GENERIC-LABEL: selectRI_uge_i32:
2386; GENERIC:       # %bb.0: # %entry
2387; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2388; GENERIC-NEXT:    subi16 sp, sp, 4
2389; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2390; GENERIC-NEXT:    movi16 a3, 9
2391; GENERIC-NEXT:    cmphs16 a3, a0
2392; GENERIC-NEXT:    mvcv16 a0
2393; GENERIC-NEXT:    btsti16 a0, 0
2394; GENERIC-NEXT:    bt16 .LBB61_2
2395; GENERIC-NEXT:  # %bb.1: # %entry
2396; GENERIC-NEXT:    mov16 a2, a1
2397; GENERIC-NEXT:  .LBB61_2: # %entry
2398; GENERIC-NEXT:    mov16 a0, a2
2399; GENERIC-NEXT:    addi16 sp, sp, 4
2400; GENERIC-NEXT:    rts16
2401entry:
2402  %icmp = icmp uge i32 %x, 10
2403  %ret = select i1 %icmp, i32 %m, i32 %n
2404  ret i32 %ret
2405}
2406
2407define i32 @selectRX_uge_i32(i32 %x, i32 %n, i32 %m) {
2408; CHECK-LABEL: selectRX_uge_i32:
2409; CHECK:       # %bb.0: # %entry
2410; CHECK-NEXT:    movih32 a3, 729
2411; CHECK-NEXT:    ori32 a3, a3, 2032
2412; CHECK-NEXT:    cmphs16 a3, a0
2413; CHECK-NEXT:    movf32 a1, a2
2414; CHECK-NEXT:    mov16 a0, a1
2415; CHECK-NEXT:    rts16
2416;
2417; GENERIC-LABEL: selectRX_uge_i32:
2418; GENERIC:       # %bb.0: # %entry
2419; GENERIC-NEXT:    subi16 sp, sp, 4
2420; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2421; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2422; GENERIC-NEXT:    .cfi_offset l0, -4
2423; GENERIC-NEXT:    subi16 sp, sp, 4
2424; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2425; GENERIC-NEXT:    movi16 a3, 2
2426; GENERIC-NEXT:    lsli16 a3, a3, 24
2427; GENERIC-NEXT:    movi16 l0, 217
2428; GENERIC-NEXT:    lsli16 l0, l0, 16
2429; GENERIC-NEXT:    or16 l0, a3
2430; GENERIC-NEXT:    movi16 a3, 7
2431; GENERIC-NEXT:    lsli16 a3, a3, 8
2432; GENERIC-NEXT:    or16 a3, l0
2433; GENERIC-NEXT:    movi16 l0, 240
2434; GENERIC-NEXT:    or16 l0, a3
2435; GENERIC-NEXT:    cmphs16 l0, a0
2436; GENERIC-NEXT:    mvcv16 a0
2437; GENERIC-NEXT:    btsti16 a0, 0
2438; GENERIC-NEXT:    bt16 .LBB62_2
2439; GENERIC-NEXT:  # %bb.1: # %entry
2440; GENERIC-NEXT:    mov16 a2, a1
2441; GENERIC-NEXT:  .LBB62_2: # %entry
2442; GENERIC-NEXT:    mov16 a0, a2
2443; GENERIC-NEXT:    addi16 sp, sp, 4
2444; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2445; GENERIC-NEXT:    addi16 sp, sp, 4
2446; GENERIC-NEXT:    rts16
2447entry:
2448  %icmp = icmp uge i32 %x, 47777777
2449  %ret = select i1 %icmp, i32 %m, i32 %n
2450  ret i32 %ret
2451}
2452
2453define i32 @selectC_uge_i32(i1 %c, i32 %n, i32 %m) {
2454; CHECK-LABEL: selectC_uge_i32:
2455; CHECK:       # %bb.0: # %entry
2456; CHECK-NEXT:    btsti32 a0, 0
2457; CHECK-NEXT:    movt32 a1, a2
2458; CHECK-NEXT:    mov16 a0, a1
2459; CHECK-NEXT:    rts16
2460;
2461; GENERIC-LABEL: selectC_uge_i32:
2462; GENERIC:       # %bb.0: # %entry
2463; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2464; GENERIC-NEXT:    subi16 sp, sp, 4
2465; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2466; GENERIC-NEXT:    btsti16 a0, 0
2467; GENERIC-NEXT:    bt16 .LBB63_2
2468; GENERIC-NEXT:  # %bb.1: # %entry
2469; GENERIC-NEXT:    mov16 a2, a1
2470; GENERIC-NEXT:  .LBB63_2: # %entry
2471; GENERIC-NEXT:    mov16 a0, a2
2472; GENERIC-NEXT:    addi16 sp, sp, 4
2473; GENERIC-NEXT:    rts16
2474entry:
2475  %ret = select i1 %c, i32 %m, i32 %n
2476  ret i32 %ret
2477}
2478
2479define i64 @selectRR_uge_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
2480; CHECK-LABEL: selectRR_uge_i64:
2481; CHECK:       # %bb.0: # %entry
2482; CHECK-NEXT:    .cfi_def_cfa_offset 0
2483; CHECK-NEXT:    subi16 sp, sp, 16
2484; CHECK-NEXT:    .cfi_def_cfa_offset 16
2485; CHECK-NEXT:    cmphs16 a3, a1
2486; CHECK-NEXT:    mvc32 t0
2487; CHECK-NEXT:    st32.w t0, (sp, 12)
2488; CHECK-NEXT:    cmphs16 a2, a0
2489; CHECK-NEXT:    mvc32 a0
2490; CHECK-NEXT:    st16.w a0, (sp, 4)
2491; CHECK-NEXT:    cmpne16 a3, a1
2492; CHECK-NEXT:    mvc32 a0
2493; CHECK-NEXT:    st16.w a0, (sp, 8)
2494; CHECK-NEXT:    ld16.w a0, (sp, 4)
2495; CHECK-NEXT:    btsti32 a0, 0
2496; CHECK-NEXT:    mvc32 a0
2497; CHECK-NEXT:    ld16.w a1, (sp, 12)
2498; CHECK-NEXT:    btsti32 a1, 0
2499; CHECK-NEXT:    mvc32 a1
2500; CHECK-NEXT:    ld16.w a2, (sp, 8)
2501; CHECK-NEXT:    btsti32 a2, 0
2502; CHECK-NEXT:    movf32 a1, a0
2503; CHECK-NEXT:    addi16 a2, sp, 16
2504; CHECK-NEXT:    addi16 a0, sp, 24
2505; CHECK-NEXT:    btsti32 a1, 0
2506; CHECK-NEXT:    movt32 a2, a0
2507; CHECK-NEXT:    ld16.w a0, (a2, 0)
2508; CHECK-NEXT:    ld16.w a1, (a2, 4)
2509; CHECK-NEXT:    addi16 sp, sp, 16
2510; CHECK-NEXT:    rts16
2511;
2512; GENERIC-LABEL: selectRR_uge_i64:
2513; GENERIC:       # %bb.0: # %entry
2514; GENERIC-NEXT:    subi16 sp, sp, 8
2515; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2516; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2517; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2518; GENERIC-NEXT:    .cfi_offset l1, -4
2519; GENERIC-NEXT:    .cfi_offset l0, -8
2520; GENERIC-NEXT:    subi16 sp, sp, 4
2521; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2522; GENERIC-NEXT:    cmphs16 a3, a1
2523; GENERIC-NEXT:    mvcv16 l1
2524; GENERIC-NEXT:    movi16 l0, 1
2525; GENERIC-NEXT:    cmphs16 a2, a0
2526; GENERIC-NEXT:    mvcv16 a0
2527; GENERIC-NEXT:    cmpne16 a3, a1
2528; GENERIC-NEXT:    mvcv16 a1
2529; GENERIC-NEXT:    btsti16 a1, 0
2530; GENERIC-NEXT:    bt16 .LBB64_3
2531; GENERIC-NEXT:  # %bb.1: # %entry
2532; GENERIC-NEXT:    subu16 l0, l1
2533; GENERIC-NEXT:    btsti16 l0, 0
2534; GENERIC-NEXT:    bf16 .LBB64_4
2535; GENERIC-NEXT:  .LBB64_2:
2536; GENERIC-NEXT:    movi16 a0, 20
2537; GENERIC-NEXT:    br32 .LBB64_5
2538; GENERIC-NEXT:  .LBB64_3:
2539; GENERIC-NEXT:    subu16 l0, a0
2540; GENERIC-NEXT:    btsti16 l0, 0
2541; GENERIC-NEXT:    bt16 .LBB64_2
2542; GENERIC-NEXT:  .LBB64_4: # %entry
2543; GENERIC-NEXT:    movi16 a0, 12
2544; GENERIC-NEXT:  .LBB64_5: # %entry
2545; GENERIC-NEXT:    addu16 a0, sp
2546; GENERIC-NEXT:    mov16 a1, a0
2547; GENERIC-NEXT:    ld16.w a0, (a0, 0)
2548; GENERIC-NEXT:    ld16.w a1, (a1, 4)
2549; GENERIC-NEXT:    addi16 sp, sp, 4
2550; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2551; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2552; GENERIC-NEXT:    addi16 sp, sp, 8
2553; GENERIC-NEXT:    rts16
2554entry:
2555  %icmp = icmp uge i64 %y, %x
2556  %ret = select i1 %icmp, i64 %m, i64 %n
2557  ret i64 %ret
2558}
2559
2560define i64 @selectRI_uge_i64(i64 %x, i64 %n, i64 %m) {
2561; CHECK-LABEL: selectRI_uge_i64:
2562; CHECK:       # %bb.0: # %entry
2563; CHECK-NEXT:    subi16 sp, sp, 4
2564; CHECK-NEXT:    .cfi_def_cfa_offset 4
2565; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2566; CHECK-NEXT:    .cfi_offset l0, -4
2567; CHECK-NEXT:    .cfi_def_cfa_offset 4
2568; CHECK-NEXT:    ld32.w t0, (sp, 8)
2569; CHECK-NEXT:    ld32.w t1, (sp, 4)
2570; CHECK-NEXT:    movi16 l0, 9
2571; CHECK-NEXT:    cmphs16 l0, a0
2572; CHECK-NEXT:    mvcv16 a0
2573; CHECK-NEXT:    cmpnei16 a1, 0
2574; CHECK-NEXT:    mvc32 a1
2575; CHECK-NEXT:    movf32 a1, a0
2576; CHECK-NEXT:    btsti32 a1, 0
2577; CHECK-NEXT:    movt32 a2, t1
2578; CHECK-NEXT:    movt32 a3, t0
2579; CHECK-NEXT:    mov16 a0, a2
2580; CHECK-NEXT:    mov16 a1, a3
2581; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2582; CHECK-NEXT:    addi16 sp, sp, 4
2583; CHECK-NEXT:    rts16
2584;
2585; GENERIC-LABEL: selectRI_uge_i64:
2586; GENERIC:       # %bb.0: # %entry
2587; GENERIC-NEXT:    subi16 sp, sp, 4
2588; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2589; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2590; GENERIC-NEXT:    .cfi_offset l0, -4
2591; GENERIC-NEXT:    subi16 sp, sp, 4
2592; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2593; GENERIC-NEXT:    cmpnei16 a1, 0
2594; GENERIC-NEXT:    mvcv16 a1
2595; GENERIC-NEXT:    movi16 l0, 9
2596; GENERIC-NEXT:    cmphs16 l0, a0
2597; GENERIC-NEXT:    mvcv16 a0
2598; GENERIC-NEXT:    btsti16 a1, 0
2599; GENERIC-NEXT:    bf16 .LBB65_5
2600; GENERIC-NEXT:  # %bb.1: # %entry
2601; GENERIC-NEXT:    btsti16 a0, 0
2602; GENERIC-NEXT:    bt16 .LBB65_6
2603; GENERIC-NEXT:  .LBB65_2: # %entry
2604; GENERIC-NEXT:    btsti16 a0, 0
2605; GENERIC-NEXT:    bf16 .LBB65_4
2606; GENERIC-NEXT:  .LBB65_3:
2607; GENERIC-NEXT:    ld16.w a3, (sp, 12)
2608; GENERIC-NEXT:  .LBB65_4: # %entry
2609; GENERIC-NEXT:    mov16 a0, a2
2610; GENERIC-NEXT:    mov16 a1, a3
2611; GENERIC-NEXT:    addi16 sp, sp, 4
2612; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2613; GENERIC-NEXT:    addi16 sp, sp, 4
2614; GENERIC-NEXT:    rts16
2615; GENERIC-NEXT:  .LBB65_5: # %entry
2616; GENERIC-NEXT:    movi16 a0, 1
2617; GENERIC-NEXT:    subu16 a0, a1
2618; GENERIC-NEXT:    btsti16 a0, 0
2619; GENERIC-NEXT:    bf16 .LBB65_2
2620; GENERIC-NEXT:  .LBB65_6:
2621; GENERIC-NEXT:    ld16.w a2, (sp, 8)
2622; GENERIC-NEXT:    btsti16 a0, 0
2623; GENERIC-NEXT:    bt16 .LBB65_3
2624; GENERIC-NEXT:    br32 .LBB65_4
2625entry:
2626  %icmp = icmp uge i64 %x, 10
2627  %ret = select i1 %icmp, i64 %m, i64 %n
2628  ret i64 %ret
2629}
2630
2631define i64 @selectRX_uge_i64(i64 %x, i64 %n, i64 %m) {
2632; CHECK-LABEL: selectRX_uge_i64:
2633; CHECK:       # %bb.0: # %entry
2634; CHECK-NEXT:    subi16 sp, sp, 4
2635; CHECK-NEXT:    .cfi_def_cfa_offset 4
2636; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2637; CHECK-NEXT:    .cfi_offset l0, -4
2638; CHECK-NEXT:    .cfi_def_cfa_offset 4
2639; CHECK-NEXT:    ld32.w t0, (sp, 8)
2640; CHECK-NEXT:    ld32.w t1, (sp, 4)
2641; CHECK-NEXT:    movih32 l0, 729
2642; CHECK-NEXT:    ori32 l0, l0, 2032
2643; CHECK-NEXT:    cmphs16 l0, a0
2644; CHECK-NEXT:    mvcv16 a0
2645; CHECK-NEXT:    cmpnei16 a1, 0
2646; CHECK-NEXT:    mvc32 a1
2647; CHECK-NEXT:    movf32 a1, a0
2648; CHECK-NEXT:    btsti32 a1, 0
2649; CHECK-NEXT:    movt32 a2, t1
2650; CHECK-NEXT:    movt32 a3, t0
2651; CHECK-NEXT:    mov16 a0, a2
2652; CHECK-NEXT:    mov16 a1, a3
2653; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2654; CHECK-NEXT:    addi16 sp, sp, 4
2655; CHECK-NEXT:    rts16
2656;
2657; GENERIC-LABEL: selectRX_uge_i64:
2658; GENERIC:       # %bb.0: # %entry
2659; GENERIC-NEXT:    subi16 sp, sp, 8
2660; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2661; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2662; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2663; GENERIC-NEXT:    .cfi_offset l1, -4
2664; GENERIC-NEXT:    .cfi_offset l0, -8
2665; GENERIC-NEXT:    subi16 sp, sp, 4
2666; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2667; GENERIC-NEXT:    cmpnei16 a1, 0
2668; GENERIC-NEXT:    mvcv16 a1
2669; GENERIC-NEXT:    movi16 l0, 2
2670; GENERIC-NEXT:    lsli16 l0, l0, 24
2671; GENERIC-NEXT:    movi16 l1, 217
2672; GENERIC-NEXT:    lsli16 l1, l1, 16
2673; GENERIC-NEXT:    or16 l1, l0
2674; GENERIC-NEXT:    movi16 l0, 7
2675; GENERIC-NEXT:    lsli16 l0, l0, 8
2676; GENERIC-NEXT:    or16 l0, l1
2677; GENERIC-NEXT:    movi16 l1, 240
2678; GENERIC-NEXT:    or16 l1, l0
2679; GENERIC-NEXT:    cmphs16 l1, a0
2680; GENERIC-NEXT:    mvcv16 a0
2681; GENERIC-NEXT:    btsti16 a1, 0
2682; GENERIC-NEXT:    bf16 .LBB66_5
2683; GENERIC-NEXT:  # %bb.1: # %entry
2684; GENERIC-NEXT:    btsti16 a0, 0
2685; GENERIC-NEXT:    bt16 .LBB66_6
2686; GENERIC-NEXT:  .LBB66_2: # %entry
2687; GENERIC-NEXT:    btsti16 a0, 0
2688; GENERIC-NEXT:    bf16 .LBB66_4
2689; GENERIC-NEXT:  .LBB66_3:
2690; GENERIC-NEXT:    ld16.w a3, (sp, 16)
2691; GENERIC-NEXT:  .LBB66_4: # %entry
2692; GENERIC-NEXT:    mov16 a0, a2
2693; GENERIC-NEXT:    mov16 a1, a3
2694; GENERIC-NEXT:    addi16 sp, sp, 4
2695; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2696; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2697; GENERIC-NEXT:    addi16 sp, sp, 8
2698; GENERIC-NEXT:    rts16
2699; GENERIC-NEXT:  .LBB66_5: # %entry
2700; GENERIC-NEXT:    movi16 a0, 1
2701; GENERIC-NEXT:    subu16 a0, a1
2702; GENERIC-NEXT:    btsti16 a0, 0
2703; GENERIC-NEXT:    bf16 .LBB66_2
2704; GENERIC-NEXT:  .LBB66_6:
2705; GENERIC-NEXT:    ld16.w a2, (sp, 12)
2706; GENERIC-NEXT:    btsti16 a0, 0
2707; GENERIC-NEXT:    bt16 .LBB66_3
2708; GENERIC-NEXT:    br32 .LBB66_4
2709entry:
2710  %icmp = icmp uge i64 %x, 47777777
2711  %ret = select i1 %icmp, i64 %m, i64 %n
2712  ret i64 %ret
2713}
2714
2715define i64 @selectC_uge_i64(i1 %c, i64 %n, i64 %m) {
2716; CHECK-LABEL: selectC_uge_i64:
2717; CHECK:       # %bb.0: # %entry
2718; CHECK-NEXT:    ld32.w t0, (sp, 0)
2719; CHECK-NEXT:    btsti32 a0, 0
2720; CHECK-NEXT:    movt32 a1, a3
2721; CHECK-NEXT:    movt32 a2, t0
2722; CHECK-NEXT:    mov16 a0, a1
2723; CHECK-NEXT:    mov16 a1, a2
2724; CHECK-NEXT:    rts16
2725;
2726; GENERIC-LABEL: selectC_uge_i64:
2727; GENERIC:       # %bb.0: # %entry
2728; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2729; GENERIC-NEXT:    subi16 sp, sp, 4
2730; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2731; GENERIC-NEXT:    btsti16 a0, 0
2732; GENERIC-NEXT:    bt16 .LBB67_2
2733; GENERIC-NEXT:  # %bb.1: # %entry
2734; GENERIC-NEXT:    mov16 a3, a1
2735; GENERIC-NEXT:  .LBB67_2: # %entry
2736; GENERIC-NEXT:    btsti16 a0, 0
2737; GENERIC-NEXT:    bf16 .LBB67_4
2738; GENERIC-NEXT:  # %bb.3:
2739; GENERIC-NEXT:    ld16.w a2, (sp, 4)
2740; GENERIC-NEXT:  .LBB67_4: # %entry
2741; GENERIC-NEXT:    mov16 a0, a3
2742; GENERIC-NEXT:    mov16 a1, a2
2743; GENERIC-NEXT:    addi16 sp, sp, 4
2744; GENERIC-NEXT:    rts16
2745entry:
2746  %ret = select i1 %c, i64 %m, i64 %n
2747  ret i64 %ret
2748}
2749
2750
2751define i16 @selectRR_uge_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
2752; CHECK-LABEL: selectRR_uge_i16:
2753; CHECK:       # %bb.0: # %entry
2754; CHECK-NEXT:    zexth16 a0, a0
2755; CHECK-NEXT:    zexth16 a1, a1
2756; CHECK-NEXT:    cmphs16 a1, a0
2757; CHECK-NEXT:    movt32 a2, a3
2758; CHECK-NEXT:    mov16 a0, a2
2759; CHECK-NEXT:    rts16
2760;
2761; GENERIC-LABEL: selectRR_uge_i16:
2762; GENERIC:       # %bb.0: # %entry
2763; GENERIC-NEXT:    subi16 sp, sp, 12
2764; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2765; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
2766; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2767; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2768; GENERIC-NEXT:    .cfi_offset l2, -4
2769; GENERIC-NEXT:    .cfi_offset l1, -8
2770; GENERIC-NEXT:    .cfi_offset l0, -12
2771; GENERIC-NEXT:    subi16 sp, sp, 4
2772; GENERIC-NEXT:    .cfi_def_cfa_offset 16
2773; GENERIC-NEXT:    movi16 l0, 0
2774; GENERIC-NEXT:    lsli16 l1, l0, 24
2775; GENERIC-NEXT:    lsli16 l0, l0, 16
2776; GENERIC-NEXT:    or16 l0, l1
2777; GENERIC-NEXT:    movi16 l1, 255
2778; GENERIC-NEXT:    lsli16 l2, l1, 8
2779; GENERIC-NEXT:    or16 l2, l0
2780; GENERIC-NEXT:    or16 l2, l1
2781; GENERIC-NEXT:    and16 a0, l2
2782; GENERIC-NEXT:    and16 l2, a1
2783; GENERIC-NEXT:    cmphs16 l2, a0
2784; GENERIC-NEXT:    mvcv16 a0
2785; GENERIC-NEXT:    movi16 a1, 1
2786; GENERIC-NEXT:    subu16 a1, a0
2787; GENERIC-NEXT:    btsti16 a1, 0
2788; GENERIC-NEXT:    bt16 .LBB68_2
2789; GENERIC-NEXT:  # %bb.1: # %entry
2790; GENERIC-NEXT:    mov16 a3, a2
2791; GENERIC-NEXT:  .LBB68_2: # %entry
2792; GENERIC-NEXT:    mov16 a0, a3
2793; GENERIC-NEXT:    addi16 sp, sp, 4
2794; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2795; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2796; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
2797; GENERIC-NEXT:    addi16 sp, sp, 12
2798; GENERIC-NEXT:    rts16
2799entry:
2800  %icmp = icmp uge i16 %y, %x
2801  %ret = select i1 %icmp, i16 %m, i16 %n
2802  ret i16 %ret
2803}
2804
2805define i16 @selectRI_uge_i16(i16 %x, i16 %n, i16 %m) {
2806; CHECK-LABEL: selectRI_uge_i16:
2807; CHECK:       # %bb.0: # %entry
2808; CHECK-NEXT:    zexth16 a0, a0
2809; CHECK-NEXT:    movi16 a3, 9
2810; CHECK-NEXT:    cmphs16 a3, a0
2811; CHECK-NEXT:    movf32 a1, a2
2812; CHECK-NEXT:    mov16 a0, a1
2813; CHECK-NEXT:    rts16
2814;
2815; GENERIC-LABEL: selectRI_uge_i16:
2816; GENERIC:       # %bb.0: # %entry
2817; GENERIC-NEXT:    subi16 sp, sp, 8
2818; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2819; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2820; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2821; GENERIC-NEXT:    .cfi_offset l1, -4
2822; GENERIC-NEXT:    .cfi_offset l0, -8
2823; GENERIC-NEXT:    subi16 sp, sp, 4
2824; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2825; GENERIC-NEXT:    movi16 a3, 0
2826; GENERIC-NEXT:    lsli16 l0, a3, 24
2827; GENERIC-NEXT:    lsli16 a3, a3, 16
2828; GENERIC-NEXT:    or16 a3, l0
2829; GENERIC-NEXT:    movi16 l0, 255
2830; GENERIC-NEXT:    lsli16 l1, l0, 8
2831; GENERIC-NEXT:    or16 l1, a3
2832; GENERIC-NEXT:    or16 l1, l0
2833; GENERIC-NEXT:    and16 l1, a0
2834; GENERIC-NEXT:    movi16 a0, 9
2835; GENERIC-NEXT:    cmphs16 a0, l1
2836; GENERIC-NEXT:    mvcv16 a0
2837; GENERIC-NEXT:    btsti16 a0, 0
2838; GENERIC-NEXT:    bt16 .LBB69_2
2839; GENERIC-NEXT:  # %bb.1: # %entry
2840; GENERIC-NEXT:    mov16 a2, a1
2841; GENERIC-NEXT:  .LBB69_2: # %entry
2842; GENERIC-NEXT:    mov16 a0, a2
2843; GENERIC-NEXT:    addi16 sp, sp, 4
2844; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2845; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2846; GENERIC-NEXT:    addi16 sp, sp, 8
2847; GENERIC-NEXT:    rts16
2848entry:
2849  %icmp = icmp uge i16 %x, 10
2850  %ret = select i1 %icmp, i16 %m, i16 %n
2851  ret i16 %ret
2852}
2853
2854define i16 @selectRX_uge_i16(i16 %x, i16 %n, i16 %m) {
2855; CHECK-LABEL: selectRX_uge_i16:
2856; CHECK:       # %bb.0: # %entry
2857; CHECK-NEXT:    zexth16 a0, a0
2858; CHECK-NEXT:    movi32 a3, 2032
2859; CHECK-NEXT:    cmphs16 a3, a0
2860; CHECK-NEXT:    movf32 a1, a2
2861; CHECK-NEXT:    mov16 a0, a1
2862; CHECK-NEXT:    rts16
2863;
2864; GENERIC-LABEL: selectRX_uge_i16:
2865; GENERIC:       # %bb.0: # %entry
2866; GENERIC-NEXT:    subi16 sp, sp, 8
2867; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2868; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
2869; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2870; GENERIC-NEXT:    .cfi_offset l1, -4
2871; GENERIC-NEXT:    .cfi_offset l0, -8
2872; GENERIC-NEXT:    subi16 sp, sp, 4
2873; GENERIC-NEXT:    .cfi_def_cfa_offset 12
2874; GENERIC-NEXT:    movi16 a3, 0
2875; GENERIC-NEXT:    lsli16 l0, a3, 24
2876; GENERIC-NEXT:    lsli16 a3, a3, 16
2877; GENERIC-NEXT:    or16 a3, l0
2878; GENERIC-NEXT:    movi16 l0, 255
2879; GENERIC-NEXT:    lsli16 l1, l0, 8
2880; GENERIC-NEXT:    or16 l1, a3
2881; GENERIC-NEXT:    or16 l1, l0
2882; GENERIC-NEXT:    and16 l1, a0
2883; GENERIC-NEXT:    movi16 a0, 7
2884; GENERIC-NEXT:    lsli16 a0, a0, 8
2885; GENERIC-NEXT:    or16 a0, a3
2886; GENERIC-NEXT:    movi16 a3, 240
2887; GENERIC-NEXT:    or16 a3, a0
2888; GENERIC-NEXT:    cmphs16 a3, l1
2889; GENERIC-NEXT:    mvcv16 a0
2890; GENERIC-NEXT:    btsti16 a0, 0
2891; GENERIC-NEXT:    bt16 .LBB70_2
2892; GENERIC-NEXT:  # %bb.1: # %entry
2893; GENERIC-NEXT:    mov16 a2, a1
2894; GENERIC-NEXT:  .LBB70_2: # %entry
2895; GENERIC-NEXT:    mov16 a0, a2
2896; GENERIC-NEXT:    addi16 sp, sp, 4
2897; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2898; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
2899; GENERIC-NEXT:    addi16 sp, sp, 8
2900; GENERIC-NEXT:    rts16
2901entry:
2902  %icmp = icmp uge i16 %x, 47777777
2903  %ret = select i1 %icmp, i16 %m, i16 %n
2904  ret i16 %ret
2905}
2906
2907define i16 @selectC_uge_i16(i1 %c, i16 %n, i16 %m) {
2908; CHECK-LABEL: selectC_uge_i16:
2909; CHECK:       # %bb.0: # %entry
2910; CHECK-NEXT:    btsti32 a0, 0
2911; CHECK-NEXT:    movt32 a1, a2
2912; CHECK-NEXT:    mov16 a0, a1
2913; CHECK-NEXT:    rts16
2914;
2915; GENERIC-LABEL: selectC_uge_i16:
2916; GENERIC:       # %bb.0: # %entry
2917; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2918; GENERIC-NEXT:    subi16 sp, sp, 4
2919; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2920; GENERIC-NEXT:    btsti16 a0, 0
2921; GENERIC-NEXT:    bt16 .LBB71_2
2922; GENERIC-NEXT:  # %bb.1: # %entry
2923; GENERIC-NEXT:    mov16 a2, a1
2924; GENERIC-NEXT:  .LBB71_2: # %entry
2925; GENERIC-NEXT:    mov16 a0, a2
2926; GENERIC-NEXT:    addi16 sp, sp, 4
2927; GENERIC-NEXT:    rts16
2928entry:
2929  %ret = select i1 %c, i16 %m, i16 %n
2930  ret i16 %ret
2931}
2932
2933
2934define i8 @selectRR_uge_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
2935; CHECK-LABEL: selectRR_uge_i8:
2936; CHECK:       # %bb.0: # %entry
2937; CHECK-NEXT:    zextb16 a0, a0
2938; CHECK-NEXT:    zextb16 a1, a1
2939; CHECK-NEXT:    cmphs16 a1, a0
2940; CHECK-NEXT:    movt32 a2, a3
2941; CHECK-NEXT:    mov16 a0, a2
2942; CHECK-NEXT:    rts16
2943;
2944; GENERIC-LABEL: selectRR_uge_i8:
2945; GENERIC:       # %bb.0: # %entry
2946; GENERIC-NEXT:    subi16 sp, sp, 4
2947; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2948; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2949; GENERIC-NEXT:    .cfi_offset l0, -4
2950; GENERIC-NEXT:    subi16 sp, sp, 4
2951; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2952; GENERIC-NEXT:    movi16 l0, 255
2953; GENERIC-NEXT:    and16 a0, l0
2954; GENERIC-NEXT:    and16 a1, l0
2955; GENERIC-NEXT:    cmphs16 a1, a0
2956; GENERIC-NEXT:    mvcv16 a0
2957; GENERIC-NEXT:    movi16 a1, 1
2958; GENERIC-NEXT:    subu16 a1, a0
2959; GENERIC-NEXT:    btsti16 a1, 0
2960; GENERIC-NEXT:    bt16 .LBB72_2
2961; GENERIC-NEXT:  # %bb.1: # %entry
2962; GENERIC-NEXT:    mov16 a3, a2
2963; GENERIC-NEXT:  .LBB72_2: # %entry
2964; GENERIC-NEXT:    mov16 a0, a3
2965; GENERIC-NEXT:    addi16 sp, sp, 4
2966; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2967; GENERIC-NEXT:    addi16 sp, sp, 4
2968; GENERIC-NEXT:    rts16
2969entry:
2970  %icmp = icmp uge i8 %y, %x
2971  %ret = select i1 %icmp, i8 %m, i8 %n
2972  ret i8 %ret
2973}
2974
2975define i8 @selectRI_uge_i8(i8 %x, i8 %n, i8 %m) {
2976; CHECK-LABEL: selectRI_uge_i8:
2977; CHECK:       # %bb.0: # %entry
2978; CHECK-NEXT:    zextb16 a0, a0
2979; CHECK-NEXT:    movi16 a3, 9
2980; CHECK-NEXT:    cmphs16 a3, a0
2981; CHECK-NEXT:    movf32 a1, a2
2982; CHECK-NEXT:    mov16 a0, a1
2983; CHECK-NEXT:    rts16
2984;
2985; GENERIC-LABEL: selectRI_uge_i8:
2986; GENERIC:       # %bb.0: # %entry
2987; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2988; GENERIC-NEXT:    subi16 sp, sp, 4
2989; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2990; GENERIC-NEXT:    movi16 a3, 255
2991; GENERIC-NEXT:    and16 a3, a0
2992; GENERIC-NEXT:    movi16 a0, 9
2993; GENERIC-NEXT:    cmphs16 a0, a3
2994; GENERIC-NEXT:    mvcv16 a0
2995; GENERIC-NEXT:    btsti16 a0, 0
2996; GENERIC-NEXT:    bt16 .LBB73_2
2997; GENERIC-NEXT:  # %bb.1: # %entry
2998; GENERIC-NEXT:    mov16 a2, a1
2999; GENERIC-NEXT:  .LBB73_2: # %entry
3000; GENERIC-NEXT:    mov16 a0, a2
3001; GENERIC-NEXT:    addi16 sp, sp, 4
3002; GENERIC-NEXT:    rts16
3003entry:
3004  %icmp = icmp uge i8 %x, 10
3005  %ret = select i1 %icmp, i8 %m, i8 %n
3006  ret i8 %ret
3007}
3008
3009define i8 @selectRX_uge_i8(i8 %x, i8 %n, i8 %m) {
3010; CHECK-LABEL: selectRX_uge_i8:
3011; CHECK:       # %bb.0: # %entry
3012; CHECK-NEXT:    zextb16 a0, a0
3013; CHECK-NEXT:    movi16 a3, 240
3014; CHECK-NEXT:    cmphs16 a3, a0
3015; CHECK-NEXT:    movf32 a1, a2
3016; CHECK-NEXT:    mov16 a0, a1
3017; CHECK-NEXT:    rts16
3018;
3019; GENERIC-LABEL: selectRX_uge_i8:
3020; GENERIC:       # %bb.0: # %entry
3021; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3022; GENERIC-NEXT:    subi16 sp, sp, 4
3023; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3024; GENERIC-NEXT:    movi16 a3, 255
3025; GENERIC-NEXT:    and16 a3, a0
3026; GENERIC-NEXT:    movi16 a0, 240
3027; GENERIC-NEXT:    cmphs16 a0, a3
3028; GENERIC-NEXT:    mvcv16 a0
3029; GENERIC-NEXT:    btsti16 a0, 0
3030; GENERIC-NEXT:    bt16 .LBB74_2
3031; GENERIC-NEXT:  # %bb.1: # %entry
3032; GENERIC-NEXT:    mov16 a2, a1
3033; GENERIC-NEXT:  .LBB74_2: # %entry
3034; GENERIC-NEXT:    mov16 a0, a2
3035; GENERIC-NEXT:    addi16 sp, sp, 4
3036; GENERIC-NEXT:    rts16
3037entry:
3038  %icmp = icmp uge i8 %x, 47777777
3039  %ret = select i1 %icmp, i8 %m, i8 %n
3040  ret i8 %ret
3041}
3042
3043define i8 @selectC_uge_i8(i1 %c, i8 %n, i8 %m) {
3044; CHECK-LABEL: selectC_uge_i8:
3045; CHECK:       # %bb.0: # %entry
3046; CHECK-NEXT:    btsti32 a0, 0
3047; CHECK-NEXT:    movt32 a1, a2
3048; CHECK-NEXT:    mov16 a0, a1
3049; CHECK-NEXT:    rts16
3050;
3051; GENERIC-LABEL: selectC_uge_i8:
3052; GENERIC:       # %bb.0: # %entry
3053; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3054; GENERIC-NEXT:    subi16 sp, sp, 4
3055; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3056; GENERIC-NEXT:    btsti16 a0, 0
3057; GENERIC-NEXT:    bt16 .LBB75_2
3058; GENERIC-NEXT:  # %bb.1: # %entry
3059; GENERIC-NEXT:    mov16 a2, a1
3060; GENERIC-NEXT:  .LBB75_2: # %entry
3061; GENERIC-NEXT:    mov16 a0, a2
3062; GENERIC-NEXT:    addi16 sp, sp, 4
3063; GENERIC-NEXT:    rts16
3064entry:
3065  %ret = select i1 %c, i8 %m, i8 %n
3066  ret i8 %ret
3067}
3068
3069
3070define i1 @selectRR_uge_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
3071; CHECK-LABEL: selectRR_uge_i1:
3072; CHECK:       # %bb.0: # %entry
3073; CHECK-NEXT:    btsti32 a0, 0
3074; CHECK-NEXT:    mov16 a0, a3
3075; CHECK-NEXT:    movt32 a0, a2
3076; CHECK-NEXT:    btsti32 a1, 0
3077; CHECK-NEXT:    movt32 a0, a3
3078; CHECK-NEXT:    rts16
3079;
3080; GENERIC-LABEL: selectRR_uge_i1:
3081; GENERIC:       # %bb.0: # %entry
3082; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3083; GENERIC-NEXT:    subi16 sp, sp, 4
3084; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3085; GENERIC-NEXT:    btsti16 a0, 0
3086; GENERIC-NEXT:    bt16 .LBB76_2
3087; GENERIC-NEXT:  # %bb.1: # %entry
3088; GENERIC-NEXT:    mov16 a2, a3
3089; GENERIC-NEXT:  .LBB76_2: # %entry
3090; GENERIC-NEXT:    btsti16 a1, 0
3091; GENERIC-NEXT:    bt16 .LBB76_4
3092; GENERIC-NEXT:  # %bb.3: # %entry
3093; GENERIC-NEXT:    mov16 a3, a2
3094; GENERIC-NEXT:  .LBB76_4: # %entry
3095; GENERIC-NEXT:    mov16 a0, a3
3096; GENERIC-NEXT:    addi16 sp, sp, 4
3097; GENERIC-NEXT:    rts16
3098entry:
3099  %icmp = icmp uge i1 %y, %x
3100  %ret = select i1 %icmp, i1 %m, i1 %n
3101  ret i1 %ret
3102}
3103
3104define i1 @selectRI_uge_i1(i1 %x, i1 %n, i1 %m) {
3105; CHECK-LABEL: selectRI_uge_i1:
3106; CHECK:       # %bb.0: # %entry
3107; CHECK-NEXT:    mov16 a0, a2
3108; CHECK-NEXT:    rts16
3109;
3110; GENERIC-LABEL: selectRI_uge_i1:
3111; GENERIC:       # %bb.0: # %entry
3112; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3113; GENERIC-NEXT:    subi16 sp, sp, 4
3114; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3115; GENERIC-NEXT:    mov16 a0, a2
3116; GENERIC-NEXT:    addi16 sp, sp, 4
3117; GENERIC-NEXT:    rts16
3118entry:
3119  %icmp = icmp uge i1 %x, 10
3120  %ret = select i1 %icmp, i1 %m, i1 %n
3121  ret i1 %ret
3122}
3123
3124define i1 @selectRX_uge_i1(i1 %x, i1 %n, i1 %m) {
3125; CHECK-LABEL: selectRX_uge_i1:
3126; CHECK:       # %bb.0: # %entry
3127; CHECK-NEXT:    btsti32 a0, 0
3128; CHECK-NEXT:    movt32 a1, a2
3129; CHECK-NEXT:    mov16 a0, a1
3130; CHECK-NEXT:    rts16
3131;
3132; GENERIC-LABEL: selectRX_uge_i1:
3133; GENERIC:       # %bb.0: # %entry
3134; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3135; GENERIC-NEXT:    subi16 sp, sp, 4
3136; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3137; GENERIC-NEXT:    btsti16 a0, 0
3138; GENERIC-NEXT:    bt16 .LBB78_2
3139; GENERIC-NEXT:  # %bb.1: # %entry
3140; GENERIC-NEXT:    mov16 a2, a1
3141; GENERIC-NEXT:  .LBB78_2: # %entry
3142; GENERIC-NEXT:    mov16 a0, a2
3143; GENERIC-NEXT:    addi16 sp, sp, 4
3144; GENERIC-NEXT:    rts16
3145entry:
3146  %icmp = icmp uge i1 %x, 47777777
3147  %ret = select i1 %icmp, i1 %m, i1 %n
3148  ret i1 %ret
3149}
3150
3151define i1 @selectC_uge_i1(i1 %c, i1 %n, i1 %m) {
3152; CHECK-LABEL: selectC_uge_i1:
3153; CHECK:       # %bb.0: # %entry
3154; CHECK-NEXT:    btsti32 a0, 0
3155; CHECK-NEXT:    movt32 a1, a2
3156; CHECK-NEXT:    mov16 a0, a1
3157; CHECK-NEXT:    rts16
3158;
3159; GENERIC-LABEL: selectC_uge_i1:
3160; GENERIC:       # %bb.0: # %entry
3161; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3162; GENERIC-NEXT:    subi16 sp, sp, 4
3163; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3164; GENERIC-NEXT:    btsti16 a0, 0
3165; GENERIC-NEXT:    bt16 .LBB79_2
3166; GENERIC-NEXT:  # %bb.1: # %entry
3167; GENERIC-NEXT:    mov16 a2, a1
3168; GENERIC-NEXT:  .LBB79_2: # %entry
3169; GENERIC-NEXT:    mov16 a0, a2
3170; GENERIC-NEXT:    addi16 sp, sp, 4
3171; GENERIC-NEXT:    rts16
3172entry:
3173  %ret = select i1 %c, i1 %m, i1 %n
3174  ret i1 %ret
3175}
3176
3177
3178define i32 @selectRR_ult_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
3179; CHECK-LABEL: selectRR_ult_i32:
3180; CHECK:       # %bb.0: # %entry
3181; CHECK-NEXT:    cmphs16 a1, a0
3182; CHECK-NEXT:    movf32 a2, a3
3183; CHECK-NEXT:    mov16 a0, a2
3184; CHECK-NEXT:    rts16
3185;
3186; GENERIC-LABEL: selectRR_ult_i32:
3187; GENERIC:       # %bb.0: # %entry
3188; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3189; GENERIC-NEXT:    subi16 sp, sp, 4
3190; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3191; GENERIC-NEXT:    cmphs16 a1, a0
3192; GENERIC-NEXT:    mvcv16 a0
3193; GENERIC-NEXT:    btsti16 a0, 0
3194; GENERIC-NEXT:    bt16 .LBB80_2
3195; GENERIC-NEXT:  # %bb.1: # %entry
3196; GENERIC-NEXT:    mov16 a3, a2
3197; GENERIC-NEXT:  .LBB80_2: # %entry
3198; GENERIC-NEXT:    mov16 a0, a3
3199; GENERIC-NEXT:    addi16 sp, sp, 4
3200; GENERIC-NEXT:    rts16
3201entry:
3202  %icmp = icmp ult i32 %y, %x
3203  %ret = select i1 %icmp, i32 %m, i32 %n
3204  ret i32 %ret
3205}
3206
3207define i32 @selectRI_ult_i32(i32 %x, i32 %n, i32 %m) {
3208; CHECK-LABEL: selectRI_ult_i32:
3209; CHECK:       # %bb.0: # %entry
3210; CHECK-NEXT:    cmphsi16 a0, 10
3211; CHECK-NEXT:    movf32 a1, a2
3212; CHECK-NEXT:    mov16 a0, a1
3213; CHECK-NEXT:    rts16
3214;
3215; GENERIC-LABEL: selectRI_ult_i32:
3216; GENERIC:       # %bb.0: # %entry
3217; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3218; GENERIC-NEXT:    subi16 sp, sp, 4
3219; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3220; GENERIC-NEXT:    cmphsi16 a0, 10
3221; GENERIC-NEXT:    mvcv16 a0
3222; GENERIC-NEXT:    btsti16 a0, 0
3223; GENERIC-NEXT:    bt16 .LBB81_2
3224; GENERIC-NEXT:  # %bb.1: # %entry
3225; GENERIC-NEXT:    mov16 a2, a1
3226; GENERIC-NEXT:  .LBB81_2: # %entry
3227; GENERIC-NEXT:    mov16 a0, a2
3228; GENERIC-NEXT:    addi16 sp, sp, 4
3229; GENERIC-NEXT:    rts16
3230entry:
3231  %icmp = icmp ult i32 %x, 10
3232  %ret = select i1 %icmp, i32 %m, i32 %n
3233  ret i32 %ret
3234}
3235
3236define i32 @selectRX_ult_i32(i32 %x, i32 %n, i32 %m) {
3237; CHECK-LABEL: selectRX_ult_i32:
3238; CHECK:       # %bb.0: # %entry
3239; CHECK-NEXT:    movih32 a3, 729
3240; CHECK-NEXT:    ori32 a3, a3, 2033
3241; CHECK-NEXT:    cmphs16 a0, a3
3242; CHECK-NEXT:    movf32 a1, a2
3243; CHECK-NEXT:    mov16 a0, a1
3244; CHECK-NEXT:    rts16
3245;
3246; GENERIC-LABEL: selectRX_ult_i32:
3247; GENERIC:       # %bb.0: # %entry
3248; GENERIC-NEXT:    subi16 sp, sp, 4
3249; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3250; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3251; GENERIC-NEXT:    .cfi_offset l0, -4
3252; GENERIC-NEXT:    subi16 sp, sp, 4
3253; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3254; GENERIC-NEXT:    movi16 a3, 2
3255; GENERIC-NEXT:    lsli16 a3, a3, 24
3256; GENERIC-NEXT:    movi16 l0, 217
3257; GENERIC-NEXT:    lsli16 l0, l0, 16
3258; GENERIC-NEXT:    or16 l0, a3
3259; GENERIC-NEXT:    movi16 a3, 7
3260; GENERIC-NEXT:    lsli16 a3, a3, 8
3261; GENERIC-NEXT:    or16 a3, l0
3262; GENERIC-NEXT:    movi16 l0, 241
3263; GENERIC-NEXT:    or16 l0, a3
3264; GENERIC-NEXT:    cmphs16 a0, l0
3265; GENERIC-NEXT:    mvcv16 a0
3266; GENERIC-NEXT:    btsti16 a0, 0
3267; GENERIC-NEXT:    bt16 .LBB82_2
3268; GENERIC-NEXT:  # %bb.1: # %entry
3269; GENERIC-NEXT:    mov16 a2, a1
3270; GENERIC-NEXT:  .LBB82_2: # %entry
3271; GENERIC-NEXT:    mov16 a0, a2
3272; GENERIC-NEXT:    addi16 sp, sp, 4
3273; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3274; GENERIC-NEXT:    addi16 sp, sp, 4
3275; GENERIC-NEXT:    rts16
3276entry:
3277  %icmp = icmp ult i32 %x, 47777777
3278  %ret = select i1 %icmp, i32 %m, i32 %n
3279  ret i32 %ret
3280}
3281
3282define i32 @selectC_ult_i32(i1 %c, i32 %n, i32 %m) {
3283; CHECK-LABEL: selectC_ult_i32:
3284; CHECK:       # %bb.0: # %entry
3285; CHECK-NEXT:    btsti32 a0, 0
3286; CHECK-NEXT:    movt32 a1, a2
3287; CHECK-NEXT:    mov16 a0, a1
3288; CHECK-NEXT:    rts16
3289;
3290; GENERIC-LABEL: selectC_ult_i32:
3291; GENERIC:       # %bb.0: # %entry
3292; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3293; GENERIC-NEXT:    subi16 sp, sp, 4
3294; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3295; GENERIC-NEXT:    btsti16 a0, 0
3296; GENERIC-NEXT:    bt16 .LBB83_2
3297; GENERIC-NEXT:  # %bb.1: # %entry
3298; GENERIC-NEXT:    mov16 a2, a1
3299; GENERIC-NEXT:  .LBB83_2: # %entry
3300; GENERIC-NEXT:    mov16 a0, a2
3301; GENERIC-NEXT:    addi16 sp, sp, 4
3302; GENERIC-NEXT:    rts16
3303entry:
3304  %ret = select i1 %c, i32 %m, i32 %n
3305  ret i32 %ret
3306}
3307
3308define i64 @selectRR_ult_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
3309; CHECK-LABEL: selectRR_ult_i64:
3310; CHECK:       # %bb.0: # %entry
3311; CHECK-NEXT:    .cfi_def_cfa_offset 0
3312; CHECK-NEXT:    subi16 sp, sp, 8
3313; CHECK-NEXT:    .cfi_def_cfa_offset 8
3314; CHECK-NEXT:    cmpne16 a3, a1
3315; CHECK-NEXT:    mvc32 t0
3316; CHECK-NEXT:    st32.w t0, (sp, 4)
3317; CHECK-NEXT:    cmphs16 a3, a1
3318; CHECK-NEXT:    mvcv16 a1
3319; CHECK-NEXT:    cmphs16 a2, a0
3320; CHECK-NEXT:    mvcv16 a0
3321; CHECK-NEXT:    ld16.w a2, (sp, 4)
3322; CHECK-NEXT:    btsti32 a2, 0
3323; CHECK-NEXT:    movf32 a1, a0
3324; CHECK-NEXT:    addi16 a2, sp, 8
3325; CHECK-NEXT:    addi16 a0, sp, 16
3326; CHECK-NEXT:    btsti32 a1, 0
3327; CHECK-NEXT:    movt32 a2, a0
3328; CHECK-NEXT:    ld16.w a0, (a2, 0)
3329; CHECK-NEXT:    ld16.w a1, (a2, 4)
3330; CHECK-NEXT:    addi16 sp, sp, 8
3331; CHECK-NEXT:    rts16
3332;
3333; GENERIC-LABEL: selectRR_ult_i64:
3334; GENERIC:       # %bb.0: # %entry
3335; GENERIC-NEXT:    subi16 sp, sp, 4
3336; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3337; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3338; GENERIC-NEXT:    .cfi_offset l0, -4
3339; GENERIC-NEXT:    subi16 sp, sp, 4
3340; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3341; GENERIC-NEXT:    cmphs16 a3, a1
3342; GENERIC-NEXT:    mvcv16 l0
3343; GENERIC-NEXT:    cmphs16 a2, a0
3344; GENERIC-NEXT:    mvcv16 a0
3345; GENERIC-NEXT:    cmpne16 a3, a1
3346; GENERIC-NEXT:    mvcv16 a1
3347; GENERIC-NEXT:    btsti16 a1, 0
3348; GENERIC-NEXT:    bt16 .LBB84_2
3349; GENERIC-NEXT:  # %bb.1: # %entry
3350; GENERIC-NEXT:    mov16 a0, l0
3351; GENERIC-NEXT:  .LBB84_2: # %entry
3352; GENERIC-NEXT:    btsti16 a0, 0
3353; GENERIC-NEXT:    bt16 .LBB84_4
3354; GENERIC-NEXT:  # %bb.3: # %entry
3355; GENERIC-NEXT:    movi16 a0, 8
3356; GENERIC-NEXT:    br32 .LBB84_5
3357; GENERIC-NEXT:  .LBB84_4:
3358; GENERIC-NEXT:    movi16 a0, 16
3359; GENERIC-NEXT:  .LBB84_5: # %entry
3360; GENERIC-NEXT:    addu16 a0, sp
3361; GENERIC-NEXT:    mov16 a1, a0
3362; GENERIC-NEXT:    ld16.w a0, (a0, 0)
3363; GENERIC-NEXT:    ld16.w a1, (a1, 4)
3364; GENERIC-NEXT:    addi16 sp, sp, 4
3365; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3366; GENERIC-NEXT:    addi16 sp, sp, 4
3367; GENERIC-NEXT:    rts16
3368entry:
3369  %icmp = icmp ult i64 %y, %x
3370  %ret = select i1 %icmp, i64 %m, i64 %n
3371  ret i64 %ret
3372}
3373
3374define i64 @selectRI_ult_i64(i64 %x, i64 %n, i64 %m) {
3375; CHECK-LABEL: selectRI_ult_i64:
3376; CHECK:       # %bb.0: # %entry
3377; CHECK-NEXT:    .cfi_def_cfa_offset 0
3378; CHECK-NEXT:    subi16 sp, sp, 8
3379; CHECK-NEXT:    .cfi_def_cfa_offset 8
3380; CHECK-NEXT:    ld32.w t0, (sp, 12)
3381; CHECK-NEXT:    ld32.w t1, (sp, 8)
3382; CHECK-NEXT:    cmpnei16 a1, 0
3383; CHECK-NEXT:    st16.w a2, (sp, 0)
3384; CHECK-NEXT:    mvc32 a1
3385; CHECK-NEXT:    st16.w a1, (sp, 4)
3386; CHECK-NEXT:    cmphsi16 a0, 10
3387; CHECK-NEXT:    mvcv16 a0
3388; CHECK-NEXT:    movi16 a1, 0
3389; CHECK-NEXT:    ld16.w a2, (sp, 4)
3390; CHECK-NEXT:    btsti32 a2, 0
3391; CHECK-NEXT:    ld16.w a2, (sp, 0)
3392; CHECK-NEXT:    movf32 a1, a0
3393; CHECK-NEXT:    btsti32 a1, 0
3394; CHECK-NEXT:    movt32 a2, t1
3395; CHECK-NEXT:    movt32 a3, t0
3396; CHECK-NEXT:    mov16 a0, a2
3397; CHECK-NEXT:    mov16 a1, a3
3398; CHECK-NEXT:    addi16 sp, sp, 8
3399; CHECK-NEXT:    rts16
3400;
3401; GENERIC-LABEL: selectRI_ult_i64:
3402; GENERIC:       # %bb.0: # %entry
3403; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3404; GENERIC-NEXT:    subi16 sp, sp, 4
3405; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3406; GENERIC-NEXT:    cmphsi16 a0, 10
3407; GENERIC-NEXT:    mvcv16 a0
3408; GENERIC-NEXT:    cmpnei16 a1, 0
3409; GENERIC-NEXT:    mvcv16 a1
3410; GENERIC-NEXT:    btsti16 a1, 0
3411; GENERIC-NEXT:    bf16 .LBB85_5
3412; GENERIC-NEXT:  # %bb.1: # %entry
3413; GENERIC-NEXT:    btsti16 a0, 0
3414; GENERIC-NEXT:    bt16 .LBB85_6
3415; GENERIC-NEXT:  .LBB85_2: # %entry
3416; GENERIC-NEXT:    btsti16 a0, 0
3417; GENERIC-NEXT:    bf16 .LBB85_4
3418; GENERIC-NEXT:  .LBB85_3:
3419; GENERIC-NEXT:    ld16.w a3, (sp, 8)
3420; GENERIC-NEXT:  .LBB85_4: # %entry
3421; GENERIC-NEXT:    mov16 a0, a2
3422; GENERIC-NEXT:    mov16 a1, a3
3423; GENERIC-NEXT:    addi16 sp, sp, 4
3424; GENERIC-NEXT:    rts16
3425; GENERIC-NEXT:  .LBB85_5: # %entry
3426; GENERIC-NEXT:    movi16 a0, 0
3427; GENERIC-NEXT:    btsti16 a0, 0
3428; GENERIC-NEXT:    bf16 .LBB85_2
3429; GENERIC-NEXT:  .LBB85_6:
3430; GENERIC-NEXT:    ld16.w a2, (sp, 4)
3431; GENERIC-NEXT:    btsti16 a0, 0
3432; GENERIC-NEXT:    bt16 .LBB85_3
3433; GENERIC-NEXT:    br32 .LBB85_4
3434entry:
3435  %icmp = icmp ult i64 %x, 10
3436  %ret = select i1 %icmp, i64 %m, i64 %n
3437  ret i64 %ret
3438}
3439
3440define i64 @selectRX_ult_i64(i64 %x, i64 %n, i64 %m) {
3441; CHECK-LABEL: selectRX_ult_i64:
3442; CHECK:       # %bb.0: # %entry
3443; CHECK-NEXT:    subi16 sp, sp, 4
3444; CHECK-NEXT:    .cfi_def_cfa_offset 4
3445; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3446; CHECK-NEXT:    .cfi_offset l0, -4
3447; CHECK-NEXT:    .cfi_def_cfa_offset 4
3448; CHECK-NEXT:    ld32.w t0, (sp, 8)
3449; CHECK-NEXT:    ld32.w t1, (sp, 4)
3450; CHECK-NEXT:    movih32 l0, 729
3451; CHECK-NEXT:    ori32 l0, l0, 2033
3452; CHECK-NEXT:    cmphs16 a0, l0
3453; CHECK-NEXT:    mvcv16 a0
3454; CHECK-NEXT:    cmpnei16 a1, 0
3455; CHECK-NEXT:    movi16 a1, 0
3456; CHECK-NEXT:    movf32 a1, a0
3457; CHECK-NEXT:    btsti32 a1, 0
3458; CHECK-NEXT:    movt32 a2, t1
3459; CHECK-NEXT:    movt32 a3, t0
3460; CHECK-NEXT:    mov16 a0, a2
3461; CHECK-NEXT:    mov16 a1, a3
3462; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3463; CHECK-NEXT:    addi16 sp, sp, 4
3464; CHECK-NEXT:    rts16
3465;
3466; GENERIC-LABEL: selectRX_ult_i64:
3467; GENERIC:       # %bb.0: # %entry
3468; GENERIC-NEXT:    subi16 sp, sp, 8
3469; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3470; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
3471; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3472; GENERIC-NEXT:    .cfi_offset l1, -4
3473; GENERIC-NEXT:    .cfi_offset l0, -8
3474; GENERIC-NEXT:    subi16 sp, sp, 4
3475; GENERIC-NEXT:    .cfi_def_cfa_offset 12
3476; GENERIC-NEXT:    movi16 l0, 2
3477; GENERIC-NEXT:    lsli16 l0, l0, 24
3478; GENERIC-NEXT:    movi16 l1, 217
3479; GENERIC-NEXT:    lsli16 l1, l1, 16
3480; GENERIC-NEXT:    or16 l1, l0
3481; GENERIC-NEXT:    movi16 l0, 7
3482; GENERIC-NEXT:    lsli16 l0, l0, 8
3483; GENERIC-NEXT:    or16 l0, l1
3484; GENERIC-NEXT:    movi16 l1, 241
3485; GENERIC-NEXT:    or16 l1, l0
3486; GENERIC-NEXT:    cmphs16 a0, l1
3487; GENERIC-NEXT:    mvcv16 a0
3488; GENERIC-NEXT:    cmpnei16 a1, 0
3489; GENERIC-NEXT:    mvcv16 a1
3490; GENERIC-NEXT:    btsti16 a1, 0
3491; GENERIC-NEXT:    bf16 .LBB86_5
3492; GENERIC-NEXT:  # %bb.1: # %entry
3493; GENERIC-NEXT:    btsti16 a0, 0
3494; GENERIC-NEXT:    bt16 .LBB86_6
3495; GENERIC-NEXT:  .LBB86_2: # %entry
3496; GENERIC-NEXT:    btsti16 a0, 0
3497; GENERIC-NEXT:    bf16 .LBB86_4
3498; GENERIC-NEXT:  .LBB86_3:
3499; GENERIC-NEXT:    ld16.w a3, (sp, 16)
3500; GENERIC-NEXT:  .LBB86_4: # %entry
3501; GENERIC-NEXT:    mov16 a0, a2
3502; GENERIC-NEXT:    mov16 a1, a3
3503; GENERIC-NEXT:    addi16 sp, sp, 4
3504; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3505; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
3506; GENERIC-NEXT:    addi16 sp, sp, 8
3507; GENERIC-NEXT:    rts16
3508; GENERIC-NEXT:  .LBB86_5: # %entry
3509; GENERIC-NEXT:    movi16 a0, 0
3510; GENERIC-NEXT:    btsti16 a0, 0
3511; GENERIC-NEXT:    bf16 .LBB86_2
3512; GENERIC-NEXT:  .LBB86_6:
3513; GENERIC-NEXT:    ld16.w a2, (sp, 12)
3514; GENERIC-NEXT:    btsti16 a0, 0
3515; GENERIC-NEXT:    bt16 .LBB86_3
3516; GENERIC-NEXT:    br32 .LBB86_4
3517entry:
3518  %icmp = icmp ult i64 %x, 47777777
3519  %ret = select i1 %icmp, i64 %m, i64 %n
3520  ret i64 %ret
3521}
3522
3523define i64 @selectC_ult_i64(i1 %c, i64 %n, i64 %m) {
3524; CHECK-LABEL: selectC_ult_i64:
3525; CHECK:       # %bb.0: # %entry
3526; CHECK-NEXT:    ld32.w t0, (sp, 0)
3527; CHECK-NEXT:    btsti32 a0, 0
3528; CHECK-NEXT:    movt32 a1, a3
3529; CHECK-NEXT:    movt32 a2, t0
3530; CHECK-NEXT:    mov16 a0, a1
3531; CHECK-NEXT:    mov16 a1, a2
3532; CHECK-NEXT:    rts16
3533;
3534; GENERIC-LABEL: selectC_ult_i64:
3535; GENERIC:       # %bb.0: # %entry
3536; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3537; GENERIC-NEXT:    subi16 sp, sp, 4
3538; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3539; GENERIC-NEXT:    btsti16 a0, 0
3540; GENERIC-NEXT:    bt16 .LBB87_2
3541; GENERIC-NEXT:  # %bb.1: # %entry
3542; GENERIC-NEXT:    mov16 a3, a1
3543; GENERIC-NEXT:  .LBB87_2: # %entry
3544; GENERIC-NEXT:    btsti16 a0, 0
3545; GENERIC-NEXT:    bf16 .LBB87_4
3546; GENERIC-NEXT:  # %bb.3:
3547; GENERIC-NEXT:    ld16.w a2, (sp, 4)
3548; GENERIC-NEXT:  .LBB87_4: # %entry
3549; GENERIC-NEXT:    mov16 a0, a3
3550; GENERIC-NEXT:    mov16 a1, a2
3551; GENERIC-NEXT:    addi16 sp, sp, 4
3552; GENERIC-NEXT:    rts16
3553entry:
3554  %ret = select i1 %c, i64 %m, i64 %n
3555  ret i64 %ret
3556}
3557
3558
3559define i16 @selectRR_ult_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
3560; CHECK-LABEL: selectRR_ult_i16:
3561; CHECK:       # %bb.0: # %entry
3562; CHECK-NEXT:    zexth16 a0, a0
3563; CHECK-NEXT:    zexth16 a1, a1
3564; CHECK-NEXT:    cmphs16 a1, a0
3565; CHECK-NEXT:    movf32 a2, a3
3566; CHECK-NEXT:    mov16 a0, a2
3567; CHECK-NEXT:    rts16
3568;
3569; GENERIC-LABEL: selectRR_ult_i16:
3570; GENERIC:       # %bb.0: # %entry
3571; GENERIC-NEXT:    subi16 sp, sp, 12
3572; GENERIC-NEXT:    .cfi_def_cfa_offset 12
3573; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
3574; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
3575; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3576; GENERIC-NEXT:    .cfi_offset l2, -4
3577; GENERIC-NEXT:    .cfi_offset l1, -8
3578; GENERIC-NEXT:    .cfi_offset l0, -12
3579; GENERIC-NEXT:    subi16 sp, sp, 4
3580; GENERIC-NEXT:    .cfi_def_cfa_offset 16
3581; GENERIC-NEXT:    movi16 l0, 0
3582; GENERIC-NEXT:    lsli16 l1, l0, 24
3583; GENERIC-NEXT:    lsli16 l0, l0, 16
3584; GENERIC-NEXT:    or16 l0, l1
3585; GENERIC-NEXT:    movi16 l1, 255
3586; GENERIC-NEXT:    lsli16 l2, l1, 8
3587; GENERIC-NEXT:    or16 l2, l0
3588; GENERIC-NEXT:    or16 l2, l1
3589; GENERIC-NEXT:    and16 a0, l2
3590; GENERIC-NEXT:    and16 l2, a1
3591; GENERIC-NEXT:    cmphs16 l2, a0
3592; GENERIC-NEXT:    mvcv16 a0
3593; GENERIC-NEXT:    btsti16 a0, 0
3594; GENERIC-NEXT:    bt16 .LBB88_2
3595; GENERIC-NEXT:  # %bb.1: # %entry
3596; GENERIC-NEXT:    mov16 a3, a2
3597; GENERIC-NEXT:  .LBB88_2: # %entry
3598; GENERIC-NEXT:    mov16 a0, a3
3599; GENERIC-NEXT:    addi16 sp, sp, 4
3600; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3601; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
3602; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
3603; GENERIC-NEXT:    addi16 sp, sp, 12
3604; GENERIC-NEXT:    rts16
3605entry:
3606  %icmp = icmp ult i16 %y, %x
3607  %ret = select i1 %icmp, i16 %m, i16 %n
3608  ret i16 %ret
3609}
3610
3611define i16 @selectRI_ult_i16(i16 %x, i16 %n, i16 %m) {
3612; CHECK-LABEL: selectRI_ult_i16:
3613; CHECK:       # %bb.0: # %entry
3614; CHECK-NEXT:    zexth16 a0, a0
3615; CHECK-NEXT:    cmphsi16 a0, 10
3616; CHECK-NEXT:    movf32 a1, a2
3617; CHECK-NEXT:    mov16 a0, a1
3618; CHECK-NEXT:    rts16
3619;
3620; GENERIC-LABEL: selectRI_ult_i16:
3621; GENERIC:       # %bb.0: # %entry
3622; GENERIC-NEXT:    subi16 sp, sp, 8
3623; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3624; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
3625; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3626; GENERIC-NEXT:    .cfi_offset l1, -4
3627; GENERIC-NEXT:    .cfi_offset l0, -8
3628; GENERIC-NEXT:    subi16 sp, sp, 4
3629; GENERIC-NEXT:    .cfi_def_cfa_offset 12
3630; GENERIC-NEXT:    movi16 a3, 0
3631; GENERIC-NEXT:    lsli16 l0, a3, 24
3632; GENERIC-NEXT:    lsli16 a3, a3, 16
3633; GENERIC-NEXT:    or16 a3, l0
3634; GENERIC-NEXT:    movi16 l0, 255
3635; GENERIC-NEXT:    lsli16 l1, l0, 8
3636; GENERIC-NEXT:    or16 l1, a3
3637; GENERIC-NEXT:    or16 l1, l0
3638; GENERIC-NEXT:    and16 l1, a0
3639; GENERIC-NEXT:    cmphsi16 l1, 10
3640; GENERIC-NEXT:    mvcv16 a0
3641; GENERIC-NEXT:    btsti16 a0, 0
3642; GENERIC-NEXT:    bt16 .LBB89_2
3643; GENERIC-NEXT:  # %bb.1: # %entry
3644; GENERIC-NEXT:    mov16 a2, a1
3645; GENERIC-NEXT:  .LBB89_2: # %entry
3646; GENERIC-NEXT:    mov16 a0, a2
3647; GENERIC-NEXT:    addi16 sp, sp, 4
3648; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3649; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
3650; GENERIC-NEXT:    addi16 sp, sp, 8
3651; GENERIC-NEXT:    rts16
3652entry:
3653  %icmp = icmp ult i16 %x, 10
3654  %ret = select i1 %icmp, i16 %m, i16 %n
3655  ret i16 %ret
3656}
3657
3658define i16 @selectRX_ult_i16(i16 %x, i16 %n, i16 %m) {
3659; CHECK-LABEL: selectRX_ult_i16:
3660; CHECK:       # %bb.0: # %entry
3661; CHECK-NEXT:    zexth16 a0, a0
3662; CHECK-NEXT:    cmphsi32 a0, 2033
3663; CHECK-NEXT:    movf32 a1, a2
3664; CHECK-NEXT:    mov16 a0, a1
3665; CHECK-NEXT:    rts16
3666;
3667; GENERIC-LABEL: selectRX_ult_i16:
3668; GENERIC:       # %bb.0: # %entry
3669; GENERIC-NEXT:    subi16 sp, sp, 8
3670; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3671; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
3672; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3673; GENERIC-NEXT:    .cfi_offset l1, -4
3674; GENERIC-NEXT:    .cfi_offset l0, -8
3675; GENERIC-NEXT:    subi16 sp, sp, 4
3676; GENERIC-NEXT:    .cfi_def_cfa_offset 12
3677; GENERIC-NEXT:    movi16 a3, 0
3678; GENERIC-NEXT:    lsli16 l0, a3, 24
3679; GENERIC-NEXT:    lsli16 a3, a3, 16
3680; GENERIC-NEXT:    or16 a3, l0
3681; GENERIC-NEXT:    movi16 l0, 255
3682; GENERIC-NEXT:    lsli16 l1, l0, 8
3683; GENERIC-NEXT:    or16 l1, a3
3684; GENERIC-NEXT:    or16 l1, l0
3685; GENERIC-NEXT:    and16 l1, a0
3686; GENERIC-NEXT:    movi16 a0, 7
3687; GENERIC-NEXT:    lsli16 a0, a0, 8
3688; GENERIC-NEXT:    or16 a0, a3
3689; GENERIC-NEXT:    movi16 a3, 241
3690; GENERIC-NEXT:    or16 a3, a0
3691; GENERIC-NEXT:    cmphs16 l1, a3
3692; GENERIC-NEXT:    mvcv16 a0
3693; GENERIC-NEXT:    btsti16 a0, 0
3694; GENERIC-NEXT:    bt16 .LBB90_2
3695; GENERIC-NEXT:  # %bb.1: # %entry
3696; GENERIC-NEXT:    mov16 a2, a1
3697; GENERIC-NEXT:  .LBB90_2: # %entry
3698; GENERIC-NEXT:    mov16 a0, a2
3699; GENERIC-NEXT:    addi16 sp, sp, 4
3700; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3701; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
3702; GENERIC-NEXT:    addi16 sp, sp, 8
3703; GENERIC-NEXT:    rts16
3704entry:
3705  %icmp = icmp ult i16 %x, 47777777
3706  %ret = select i1 %icmp, i16 %m, i16 %n
3707  ret i16 %ret
3708}
3709
3710define i16 @selectC_ult_i16(i1 %c, i16 %n, i16 %m) {
3711; CHECK-LABEL: selectC_ult_i16:
3712; CHECK:       # %bb.0: # %entry
3713; CHECK-NEXT:    btsti32 a0, 0
3714; CHECK-NEXT:    movt32 a1, a2
3715; CHECK-NEXT:    mov16 a0, a1
3716; CHECK-NEXT:    rts16
3717;
3718; GENERIC-LABEL: selectC_ult_i16:
3719; GENERIC:       # %bb.0: # %entry
3720; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3721; GENERIC-NEXT:    subi16 sp, sp, 4
3722; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3723; GENERIC-NEXT:    btsti16 a0, 0
3724; GENERIC-NEXT:    bt16 .LBB91_2
3725; GENERIC-NEXT:  # %bb.1: # %entry
3726; GENERIC-NEXT:    mov16 a2, a1
3727; GENERIC-NEXT:  .LBB91_2: # %entry
3728; GENERIC-NEXT:    mov16 a0, a2
3729; GENERIC-NEXT:    addi16 sp, sp, 4
3730; GENERIC-NEXT:    rts16
3731entry:
3732  %ret = select i1 %c, i16 %m, i16 %n
3733  ret i16 %ret
3734}
3735
3736
3737define i8 @selectRR_ult_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
3738; CHECK-LABEL: selectRR_ult_i8:
3739; CHECK:       # %bb.0: # %entry
3740; CHECK-NEXT:    zextb16 a0, a0
3741; CHECK-NEXT:    zextb16 a1, a1
3742; CHECK-NEXT:    cmphs16 a1, a0
3743; CHECK-NEXT:    movf32 a2, a3
3744; CHECK-NEXT:    mov16 a0, a2
3745; CHECK-NEXT:    rts16
3746;
3747; GENERIC-LABEL: selectRR_ult_i8:
3748; GENERIC:       # %bb.0: # %entry
3749; GENERIC-NEXT:    subi16 sp, sp, 4
3750; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3751; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3752; GENERIC-NEXT:    .cfi_offset l0, -4
3753; GENERIC-NEXT:    subi16 sp, sp, 4
3754; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3755; GENERIC-NEXT:    movi16 l0, 255
3756; GENERIC-NEXT:    and16 a0, l0
3757; GENERIC-NEXT:    and16 a1, l0
3758; GENERIC-NEXT:    cmphs16 a1, a0
3759; GENERIC-NEXT:    mvcv16 a0
3760; GENERIC-NEXT:    btsti16 a0, 0
3761; GENERIC-NEXT:    bt16 .LBB92_2
3762; GENERIC-NEXT:  # %bb.1: # %entry
3763; GENERIC-NEXT:    mov16 a3, a2
3764; GENERIC-NEXT:  .LBB92_2: # %entry
3765; GENERIC-NEXT:    mov16 a0, a3
3766; GENERIC-NEXT:    addi16 sp, sp, 4
3767; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3768; GENERIC-NEXT:    addi16 sp, sp, 4
3769; GENERIC-NEXT:    rts16
3770entry:
3771  %icmp = icmp ult i8 %y, %x
3772  %ret = select i1 %icmp, i8 %m, i8 %n
3773  ret i8 %ret
3774}
3775
3776define i8 @selectRI_ult_i8(i8 %x, i8 %n, i8 %m) {
3777; CHECK-LABEL: selectRI_ult_i8:
3778; CHECK:       # %bb.0: # %entry
3779; CHECK-NEXT:    zextb16 a0, a0
3780; CHECK-NEXT:    cmphsi16 a0, 10
3781; CHECK-NEXT:    movf32 a1, a2
3782; CHECK-NEXT:    mov16 a0, a1
3783; CHECK-NEXT:    rts16
3784;
3785; GENERIC-LABEL: selectRI_ult_i8:
3786; GENERIC:       # %bb.0: # %entry
3787; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3788; GENERIC-NEXT:    subi16 sp, sp, 4
3789; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3790; GENERIC-NEXT:    movi16 a3, 255
3791; GENERIC-NEXT:    and16 a3, a0
3792; GENERIC-NEXT:    cmphsi16 a3, 10
3793; GENERIC-NEXT:    mvcv16 a0
3794; GENERIC-NEXT:    btsti16 a0, 0
3795; GENERIC-NEXT:    bt16 .LBB93_2
3796; GENERIC-NEXT:  # %bb.1: # %entry
3797; GENERIC-NEXT:    mov16 a2, a1
3798; GENERIC-NEXT:  .LBB93_2: # %entry
3799; GENERIC-NEXT:    mov16 a0, a2
3800; GENERIC-NEXT:    addi16 sp, sp, 4
3801; GENERIC-NEXT:    rts16
3802entry:
3803  %icmp = icmp ult i8 %x, 10
3804  %ret = select i1 %icmp, i8 %m, i8 %n
3805  ret i8 %ret
3806}
3807
3808define i8 @selectRX_ult_i8(i8 %x, i8 %n, i8 %m) {
3809; CHECK-LABEL: selectRX_ult_i8:
3810; CHECK:       # %bb.0: # %entry
3811; CHECK-NEXT:    zextb16 a0, a0
3812; CHECK-NEXT:    cmphsi32 a0, 241
3813; CHECK-NEXT:    movf32 a1, a2
3814; CHECK-NEXT:    mov16 a0, a1
3815; CHECK-NEXT:    rts16
3816;
3817; GENERIC-LABEL: selectRX_ult_i8:
3818; GENERIC:       # %bb.0: # %entry
3819; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3820; GENERIC-NEXT:    subi16 sp, sp, 4
3821; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3822; GENERIC-NEXT:    movi16 a3, 255
3823; GENERIC-NEXT:    and16 a3, a0
3824; GENERIC-NEXT:    movi16 a0, 241
3825; GENERIC-NEXT:    cmphs16 a3, a0
3826; GENERIC-NEXT:    mvcv16 a0
3827; GENERIC-NEXT:    btsti16 a0, 0
3828; GENERIC-NEXT:    bt16 .LBB94_2
3829; GENERIC-NEXT:  # %bb.1: # %entry
3830; GENERIC-NEXT:    mov16 a2, a1
3831; GENERIC-NEXT:  .LBB94_2: # %entry
3832; GENERIC-NEXT:    mov16 a0, a2
3833; GENERIC-NEXT:    addi16 sp, sp, 4
3834; GENERIC-NEXT:    rts16
3835entry:
3836  %icmp = icmp ult i8 %x, 47777777
3837  %ret = select i1 %icmp, i8 %m, i8 %n
3838  ret i8 %ret
3839}
3840
3841define i8 @selectC_ult_i8(i1 %c, i8 %n, i8 %m) {
3842; CHECK-LABEL: selectC_ult_i8:
3843; CHECK:       # %bb.0: # %entry
3844; CHECK-NEXT:    btsti32 a0, 0
3845; CHECK-NEXT:    movt32 a1, a2
3846; CHECK-NEXT:    mov16 a0, a1
3847; CHECK-NEXT:    rts16
3848;
3849; GENERIC-LABEL: selectC_ult_i8:
3850; GENERIC:       # %bb.0: # %entry
3851; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3852; GENERIC-NEXT:    subi16 sp, sp, 4
3853; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3854; GENERIC-NEXT:    btsti16 a0, 0
3855; GENERIC-NEXT:    bt16 .LBB95_2
3856; GENERIC-NEXT:  # %bb.1: # %entry
3857; GENERIC-NEXT:    mov16 a2, a1
3858; GENERIC-NEXT:  .LBB95_2: # %entry
3859; GENERIC-NEXT:    mov16 a0, a2
3860; GENERIC-NEXT:    addi16 sp, sp, 4
3861; GENERIC-NEXT:    rts16
3862entry:
3863  %ret = select i1 %c, i8 %m, i8 %n
3864  ret i8 %ret
3865}
3866
3867
3868define i1 @selectRR_ult_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
3869; CHECK-LABEL: selectRR_ult_i1:
3870; CHECK:       # %bb.0: # %entry
3871; CHECK-NEXT:    btsti32 a1, 0
3872; CHECK-NEXT:    movt32 a3, a2
3873; CHECK-NEXT:    btsti32 a0, 0
3874; CHECK-NEXT:    movt32 a2, a3
3875; CHECK-NEXT:    mov16 a0, a2
3876; CHECK-NEXT:    rts16
3877;
3878; GENERIC-LABEL: selectRR_ult_i1:
3879; GENERIC:       # %bb.0: # %entry
3880; GENERIC-NEXT:    subi16 sp, sp, 4
3881; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3882; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
3883; GENERIC-NEXT:    .cfi_offset l0, -4
3884; GENERIC-NEXT:    subi16 sp, sp, 4
3885; GENERIC-NEXT:    .cfi_def_cfa_offset 8
3886; GENERIC-NEXT:    mov16 l0, a0
3887; GENERIC-NEXT:    btsti16 a1, 0
3888; GENERIC-NEXT:    mov16 a0, a2
3889; GENERIC-NEXT:    bt16 .LBB96_2
3890; GENERIC-NEXT:  # %bb.1: # %entry
3891; GENERIC-NEXT:    mov16 a0, a3
3892; GENERIC-NEXT:  .LBB96_2: # %entry
3893; GENERIC-NEXT:    btsti16 l0, 0
3894; GENERIC-NEXT:    bt16 .LBB96_4
3895; GENERIC-NEXT:  # %bb.3: # %entry
3896; GENERIC-NEXT:    mov16 a0, a2
3897; GENERIC-NEXT:  .LBB96_4: # %entry
3898; GENERIC-NEXT:    addi16 sp, sp, 4
3899; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
3900; GENERIC-NEXT:    addi16 sp, sp, 4
3901; GENERIC-NEXT:    rts16
3902entry:
3903  %icmp = icmp ult i1 %y, %x
3904  %ret = select i1 %icmp, i1 %m, i1 %n
3905  ret i1 %ret
3906}
3907
3908define i1 @selectRI_ult_i1(i1 %x, i1 %n, i1 %m) {
3909; CHECK-LABEL: selectRI_ult_i1:
3910; CHECK:       # %bb.0: # %entry
3911; CHECK-NEXT:    mov16 a0, a1
3912; CHECK-NEXT:    rts16
3913;
3914; GENERIC-LABEL: selectRI_ult_i1:
3915; GENERIC:       # %bb.0: # %entry
3916; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3917; GENERIC-NEXT:    subi16 sp, sp, 4
3918; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3919; GENERIC-NEXT:    mov16 a0, a1
3920; GENERIC-NEXT:    addi16 sp, sp, 4
3921; GENERIC-NEXT:    rts16
3922entry:
3923  %icmp = icmp ult i1 %x, 10
3924  %ret = select i1 %icmp, i1 %m, i1 %n
3925  ret i1 %ret
3926}
3927
3928define i1 @selectRX_ult_i1(i1 %x, i1 %n, i1 %m) {
3929; CHECK-LABEL: selectRX_ult_i1:
3930; CHECK:       # %bb.0: # %entry
3931; CHECK-NEXT:    btsti32 a0, 0
3932; CHECK-NEXT:    movt32 a2, a1
3933; CHECK-NEXT:    mov16 a0, a2
3934; CHECK-NEXT:    rts16
3935;
3936; GENERIC-LABEL: selectRX_ult_i1:
3937; GENERIC:       # %bb.0: # %entry
3938; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3939; GENERIC-NEXT:    subi16 sp, sp, 4
3940; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3941; GENERIC-NEXT:    btsti16 a0, 0
3942; GENERIC-NEXT:    bt16 .LBB98_2
3943; GENERIC-NEXT:  # %bb.1: # %entry
3944; GENERIC-NEXT:    mov16 a1, a2
3945; GENERIC-NEXT:  .LBB98_2: # %entry
3946; GENERIC-NEXT:    mov16 a0, a1
3947; GENERIC-NEXT:    addi16 sp, sp, 4
3948; GENERIC-NEXT:    rts16
3949entry:
3950  %icmp = icmp ult i1 %x, 47777777
3951  %ret = select i1 %icmp, i1 %m, i1 %n
3952  ret i1 %ret
3953}
3954
3955define i1 @selectC_ult_i1(i1 %c, i1 %n, i1 %m) {
3956; CHECK-LABEL: selectC_ult_i1:
3957; CHECK:       # %bb.0: # %entry
3958; CHECK-NEXT:    btsti32 a0, 0
3959; CHECK-NEXT:    movt32 a1, a2
3960; CHECK-NEXT:    mov16 a0, a1
3961; CHECK-NEXT:    rts16
3962;
3963; GENERIC-LABEL: selectC_ult_i1:
3964; GENERIC:       # %bb.0: # %entry
3965; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3966; GENERIC-NEXT:    subi16 sp, sp, 4
3967; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3968; GENERIC-NEXT:    btsti16 a0, 0
3969; GENERIC-NEXT:    bt16 .LBB99_2
3970; GENERIC-NEXT:  # %bb.1: # %entry
3971; GENERIC-NEXT:    mov16 a2, a1
3972; GENERIC-NEXT:  .LBB99_2: # %entry
3973; GENERIC-NEXT:    mov16 a0, a2
3974; GENERIC-NEXT:    addi16 sp, sp, 4
3975; GENERIC-NEXT:    rts16
3976entry:
3977  %ret = select i1 %c, i1 %m, i1 %n
3978  ret i1 %ret
3979}
3980
3981define i32 @selectRR_ule_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
3982; CHECK-LABEL: selectRR_ule_i32:
3983; CHECK:       # %bb.0: # %entry
3984; CHECK-NEXT:    cmphs16 a0, a1
3985; CHECK-NEXT:    movt32 a2, a3
3986; CHECK-NEXT:    mov16 a0, a2
3987; CHECK-NEXT:    rts16
3988;
3989; GENERIC-LABEL: selectRR_ule_i32:
3990; GENERIC:       # %bb.0: # %entry
3991; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3992; GENERIC-NEXT:    subi16 sp, sp, 4
3993; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3994; GENERIC-NEXT:    cmphs16 a0, a1
3995; GENERIC-NEXT:    mvcv16 a0
3996; GENERIC-NEXT:    movi16 a1, 1
3997; GENERIC-NEXT:    subu16 a1, a0
3998; GENERIC-NEXT:    btsti16 a1, 0
3999; GENERIC-NEXT:    bt16 .LBB100_2
4000; GENERIC-NEXT:  # %bb.1: # %entry
4001; GENERIC-NEXT:    mov16 a3, a2
4002; GENERIC-NEXT:  .LBB100_2: # %entry
4003; GENERIC-NEXT:    mov16 a0, a3
4004; GENERIC-NEXT:    addi16 sp, sp, 4
4005; GENERIC-NEXT:    rts16
4006entry:
4007  %icmp = icmp ule i32 %y, %x
4008  %ret = select i1 %icmp, i32 %m, i32 %n
4009  ret i32 %ret
4010}
4011
4012define i32 @selectRI_ule_i32(i32 %x, i32 %n, i32 %m) {
4013; CHECK-LABEL: selectRI_ule_i32:
4014; CHECK:       # %bb.0: # %entry
4015; CHECK-NEXT:    cmphsi16 a0, 11
4016; CHECK-NEXT:    movf32 a1, a2
4017; CHECK-NEXT:    mov16 a0, a1
4018; CHECK-NEXT:    rts16
4019;
4020; GENERIC-LABEL: selectRI_ule_i32:
4021; GENERIC:       # %bb.0: # %entry
4022; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4023; GENERIC-NEXT:    subi16 sp, sp, 4
4024; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4025; GENERIC-NEXT:    cmphsi16 a0, 11
4026; GENERIC-NEXT:    mvcv16 a0
4027; GENERIC-NEXT:    btsti16 a0, 0
4028; GENERIC-NEXT:    bt16 .LBB101_2
4029; GENERIC-NEXT:  # %bb.1: # %entry
4030; GENERIC-NEXT:    mov16 a2, a1
4031; GENERIC-NEXT:  .LBB101_2: # %entry
4032; GENERIC-NEXT:    mov16 a0, a2
4033; GENERIC-NEXT:    addi16 sp, sp, 4
4034; GENERIC-NEXT:    rts16
4035entry:
4036  %icmp = icmp ule i32 %x, 10
4037  %ret = select i1 %icmp, i32 %m, i32 %n
4038  ret i32 %ret
4039}
4040
4041define i32 @selectRX_ule_i32(i32 %x, i32 %n, i32 %m) {
4042; CHECK-LABEL: selectRX_ule_i32:
4043; CHECK:       # %bb.0: # %entry
4044; CHECK-NEXT:    movih32 a3, 729
4045; CHECK-NEXT:    ori32 a3, a3, 2034
4046; CHECK-NEXT:    cmphs16 a0, a3
4047; CHECK-NEXT:    movf32 a1, a2
4048; CHECK-NEXT:    mov16 a0, a1
4049; CHECK-NEXT:    rts16
4050;
4051; GENERIC-LABEL: selectRX_ule_i32:
4052; GENERIC:       # %bb.0: # %entry
4053; GENERIC-NEXT:    subi16 sp, sp, 4
4054; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4055; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4056; GENERIC-NEXT:    .cfi_offset l0, -4
4057; GENERIC-NEXT:    subi16 sp, sp, 4
4058; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4059; GENERIC-NEXT:    movi16 a3, 2
4060; GENERIC-NEXT:    lsli16 a3, a3, 24
4061; GENERIC-NEXT:    movi16 l0, 217
4062; GENERIC-NEXT:    lsli16 l0, l0, 16
4063; GENERIC-NEXT:    or16 l0, a3
4064; GENERIC-NEXT:    movi16 a3, 7
4065; GENERIC-NEXT:    lsli16 a3, a3, 8
4066; GENERIC-NEXT:    or16 a3, l0
4067; GENERIC-NEXT:    movi16 l0, 242
4068; GENERIC-NEXT:    or16 l0, a3
4069; GENERIC-NEXT:    cmphs16 a0, l0
4070; GENERIC-NEXT:    mvcv16 a0
4071; GENERIC-NEXT:    btsti16 a0, 0
4072; GENERIC-NEXT:    bt16 .LBB102_2
4073; GENERIC-NEXT:  # %bb.1: # %entry
4074; GENERIC-NEXT:    mov16 a2, a1
4075; GENERIC-NEXT:  .LBB102_2: # %entry
4076; GENERIC-NEXT:    mov16 a0, a2
4077; GENERIC-NEXT:    addi16 sp, sp, 4
4078; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4079; GENERIC-NEXT:    addi16 sp, sp, 4
4080; GENERIC-NEXT:    rts16
4081entry:
4082  %icmp = icmp ule i32 %x, 47777777
4083  %ret = select i1 %icmp, i32 %m, i32 %n
4084  ret i32 %ret
4085}
4086
4087define i32 @selectC_ule_i32(i1 %c, i32 %n, i32 %m) {
4088; CHECK-LABEL: selectC_ule_i32:
4089; CHECK:       # %bb.0: # %entry
4090; CHECK-NEXT:    btsti32 a0, 0
4091; CHECK-NEXT:    movt32 a1, a2
4092; CHECK-NEXT:    mov16 a0, a1
4093; CHECK-NEXT:    rts16
4094;
4095; GENERIC-LABEL: selectC_ule_i32:
4096; GENERIC:       # %bb.0: # %entry
4097; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4098; GENERIC-NEXT:    subi16 sp, sp, 4
4099; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4100; GENERIC-NEXT:    btsti16 a0, 0
4101; GENERIC-NEXT:    bt16 .LBB103_2
4102; GENERIC-NEXT:  # %bb.1: # %entry
4103; GENERIC-NEXT:    mov16 a2, a1
4104; GENERIC-NEXT:  .LBB103_2: # %entry
4105; GENERIC-NEXT:    mov16 a0, a2
4106; GENERIC-NEXT:    addi16 sp, sp, 4
4107; GENERIC-NEXT:    rts16
4108entry:
4109  %ret = select i1 %c, i32 %m, i32 %n
4110  ret i32 %ret
4111}
4112
4113define i64 @selectRR_ule_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
4114; CHECK-LABEL: selectRR_ule_i64:
4115; CHECK:       # %bb.0: # %entry
4116; CHECK-NEXT:    .cfi_def_cfa_offset 0
4117; CHECK-NEXT:    subi16 sp, sp, 16
4118; CHECK-NEXT:    .cfi_def_cfa_offset 16
4119; CHECK-NEXT:    cmphs16 a1, a3
4120; CHECK-NEXT:    mvc32 t0
4121; CHECK-NEXT:    st32.w t0, (sp, 12)
4122; CHECK-NEXT:    cmphs16 a0, a2
4123; CHECK-NEXT:    mvc32 a0
4124; CHECK-NEXT:    st16.w a0, (sp, 4)
4125; CHECK-NEXT:    cmpne16 a3, a1
4126; CHECK-NEXT:    mvc32 a0
4127; CHECK-NEXT:    st16.w a0, (sp, 8)
4128; CHECK-NEXT:    ld16.w a0, (sp, 4)
4129; CHECK-NEXT:    btsti32 a0, 0
4130; CHECK-NEXT:    mvc32 a0
4131; CHECK-NEXT:    ld16.w a1, (sp, 12)
4132; CHECK-NEXT:    btsti32 a1, 0
4133; CHECK-NEXT:    mvc32 a1
4134; CHECK-NEXT:    ld16.w a2, (sp, 8)
4135; CHECK-NEXT:    btsti32 a2, 0
4136; CHECK-NEXT:    movf32 a1, a0
4137; CHECK-NEXT:    addi16 a2, sp, 16
4138; CHECK-NEXT:    addi16 a0, sp, 24
4139; CHECK-NEXT:    btsti32 a1, 0
4140; CHECK-NEXT:    movt32 a2, a0
4141; CHECK-NEXT:    ld16.w a0, (a2, 0)
4142; CHECK-NEXT:    ld16.w a1, (a2, 4)
4143; CHECK-NEXT:    addi16 sp, sp, 16
4144; CHECK-NEXT:    rts16
4145;
4146; GENERIC-LABEL: selectRR_ule_i64:
4147; GENERIC:       # %bb.0: # %entry
4148; GENERIC-NEXT:    subi16 sp, sp, 8
4149; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4150; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
4151; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4152; GENERIC-NEXT:    .cfi_offset l1, -4
4153; GENERIC-NEXT:    .cfi_offset l0, -8
4154; GENERIC-NEXT:    subi16 sp, sp, 4
4155; GENERIC-NEXT:    .cfi_def_cfa_offset 12
4156; GENERIC-NEXT:    cmphs16 a1, a3
4157; GENERIC-NEXT:    mvcv16 l1
4158; GENERIC-NEXT:    movi16 l0, 1
4159; GENERIC-NEXT:    cmphs16 a0, a2
4160; GENERIC-NEXT:    mvcv16 a0
4161; GENERIC-NEXT:    cmpne16 a3, a1
4162; GENERIC-NEXT:    mvcv16 a1
4163; GENERIC-NEXT:    btsti16 a1, 0
4164; GENERIC-NEXT:    bt16 .LBB104_3
4165; GENERIC-NEXT:  # %bb.1: # %entry
4166; GENERIC-NEXT:    subu16 l0, l1
4167; GENERIC-NEXT:    btsti16 l0, 0
4168; GENERIC-NEXT:    bf16 .LBB104_4
4169; GENERIC-NEXT:  .LBB104_2:
4170; GENERIC-NEXT:    movi16 a0, 20
4171; GENERIC-NEXT:    br32 .LBB104_5
4172; GENERIC-NEXT:  .LBB104_3:
4173; GENERIC-NEXT:    subu16 l0, a0
4174; GENERIC-NEXT:    btsti16 l0, 0
4175; GENERIC-NEXT:    bt16 .LBB104_2
4176; GENERIC-NEXT:  .LBB104_4: # %entry
4177; GENERIC-NEXT:    movi16 a0, 12
4178; GENERIC-NEXT:  .LBB104_5: # %entry
4179; GENERIC-NEXT:    addu16 a0, sp
4180; GENERIC-NEXT:    mov16 a1, a0
4181; GENERIC-NEXT:    ld16.w a0, (a0, 0)
4182; GENERIC-NEXT:    ld16.w a1, (a1, 4)
4183; GENERIC-NEXT:    addi16 sp, sp, 4
4184; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4185; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
4186; GENERIC-NEXT:    addi16 sp, sp, 8
4187; GENERIC-NEXT:    rts16
4188entry:
4189  %icmp = icmp ule i64 %y, %x
4190  %ret = select i1 %icmp, i64 %m, i64 %n
4191  ret i64 %ret
4192}
4193
4194define i64 @selectRI_ule_i64(i64 %x, i64 %n, i64 %m) {
4195; CHECK-LABEL: selectRI_ule_i64:
4196; CHECK:       # %bb.0: # %entry
4197; CHECK-NEXT:    .cfi_def_cfa_offset 0
4198; CHECK-NEXT:    subi16 sp, sp, 8
4199; CHECK-NEXT:    .cfi_def_cfa_offset 8
4200; CHECK-NEXT:    ld32.w t0, (sp, 12)
4201; CHECK-NEXT:    ld32.w t1, (sp, 8)
4202; CHECK-NEXT:    cmpnei16 a1, 0
4203; CHECK-NEXT:    st16.w a2, (sp, 0)
4204; CHECK-NEXT:    mvc32 a1
4205; CHECK-NEXT:    st16.w a1, (sp, 4)
4206; CHECK-NEXT:    cmphsi16 a0, 11
4207; CHECK-NEXT:    mvcv16 a0
4208; CHECK-NEXT:    movi16 a1, 0
4209; CHECK-NEXT:    ld16.w a2, (sp, 4)
4210; CHECK-NEXT:    btsti32 a2, 0
4211; CHECK-NEXT:    ld16.w a2, (sp, 0)
4212; CHECK-NEXT:    movf32 a1, a0
4213; CHECK-NEXT:    btsti32 a1, 0
4214; CHECK-NEXT:    movt32 a2, t1
4215; CHECK-NEXT:    movt32 a3, t0
4216; CHECK-NEXT:    mov16 a0, a2
4217; CHECK-NEXT:    mov16 a1, a3
4218; CHECK-NEXT:    addi16 sp, sp, 8
4219; CHECK-NEXT:    rts16
4220;
4221; GENERIC-LABEL: selectRI_ule_i64:
4222; GENERIC:       # %bb.0: # %entry
4223; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4224; GENERIC-NEXT:    subi16 sp, sp, 4
4225; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4226; GENERIC-NEXT:    cmphsi16 a0, 11
4227; GENERIC-NEXT:    mvcv16 a0
4228; GENERIC-NEXT:    cmpnei16 a1, 0
4229; GENERIC-NEXT:    mvcv16 a1
4230; GENERIC-NEXT:    btsti16 a1, 0
4231; GENERIC-NEXT:    bf16 .LBB105_5
4232; GENERIC-NEXT:  # %bb.1: # %entry
4233; GENERIC-NEXT:    btsti16 a0, 0
4234; GENERIC-NEXT:    bt16 .LBB105_6
4235; GENERIC-NEXT:  .LBB105_2: # %entry
4236; GENERIC-NEXT:    btsti16 a0, 0
4237; GENERIC-NEXT:    bf16 .LBB105_4
4238; GENERIC-NEXT:  .LBB105_3:
4239; GENERIC-NEXT:    ld16.w a3, (sp, 8)
4240; GENERIC-NEXT:  .LBB105_4: # %entry
4241; GENERIC-NEXT:    mov16 a0, a2
4242; GENERIC-NEXT:    mov16 a1, a3
4243; GENERIC-NEXT:    addi16 sp, sp, 4
4244; GENERIC-NEXT:    rts16
4245; GENERIC-NEXT:  .LBB105_5: # %entry
4246; GENERIC-NEXT:    movi16 a0, 0
4247; GENERIC-NEXT:    btsti16 a0, 0
4248; GENERIC-NEXT:    bf16 .LBB105_2
4249; GENERIC-NEXT:  .LBB105_6:
4250; GENERIC-NEXT:    ld16.w a2, (sp, 4)
4251; GENERIC-NEXT:    btsti16 a0, 0
4252; GENERIC-NEXT:    bt16 .LBB105_3
4253; GENERIC-NEXT:    br32 .LBB105_4
4254entry:
4255  %icmp = icmp ule i64 %x, 10
4256  %ret = select i1 %icmp, i64 %m, i64 %n
4257  ret i64 %ret
4258}
4259
4260define i64 @selectRX_ule_i64(i64 %x, i64 %n, i64 %m) {
4261; CHECK-LABEL: selectRX_ule_i64:
4262; CHECK:       # %bb.0: # %entry
4263; CHECK-NEXT:    subi16 sp, sp, 4
4264; CHECK-NEXT:    .cfi_def_cfa_offset 4
4265; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4266; CHECK-NEXT:    .cfi_offset l0, -4
4267; CHECK-NEXT:    .cfi_def_cfa_offset 4
4268; CHECK-NEXT:    ld32.w t0, (sp, 8)
4269; CHECK-NEXT:    ld32.w t1, (sp, 4)
4270; CHECK-NEXT:    movih32 l0, 729
4271; CHECK-NEXT:    ori32 l0, l0, 2034
4272; CHECK-NEXT:    cmphs16 a0, l0
4273; CHECK-NEXT:    mvcv16 a0
4274; CHECK-NEXT:    cmpnei16 a1, 0
4275; CHECK-NEXT:    movi16 a1, 0
4276; CHECK-NEXT:    movf32 a1, a0
4277; CHECK-NEXT:    btsti32 a1, 0
4278; CHECK-NEXT:    movt32 a2, t1
4279; CHECK-NEXT:    movt32 a3, t0
4280; CHECK-NEXT:    mov16 a0, a2
4281; CHECK-NEXT:    mov16 a1, a3
4282; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4283; CHECK-NEXT:    addi16 sp, sp, 4
4284; CHECK-NEXT:    rts16
4285;
4286; GENERIC-LABEL: selectRX_ule_i64:
4287; GENERIC:       # %bb.0: # %entry
4288; GENERIC-NEXT:    subi16 sp, sp, 8
4289; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4290; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
4291; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4292; GENERIC-NEXT:    .cfi_offset l1, -4
4293; GENERIC-NEXT:    .cfi_offset l0, -8
4294; GENERIC-NEXT:    subi16 sp, sp, 4
4295; GENERIC-NEXT:    .cfi_def_cfa_offset 12
4296; GENERIC-NEXT:    movi16 l0, 2
4297; GENERIC-NEXT:    lsli16 l0, l0, 24
4298; GENERIC-NEXT:    movi16 l1, 217
4299; GENERIC-NEXT:    lsli16 l1, l1, 16
4300; GENERIC-NEXT:    or16 l1, l0
4301; GENERIC-NEXT:    movi16 l0, 7
4302; GENERIC-NEXT:    lsli16 l0, l0, 8
4303; GENERIC-NEXT:    or16 l0, l1
4304; GENERIC-NEXT:    movi16 l1, 242
4305; GENERIC-NEXT:    or16 l1, l0
4306; GENERIC-NEXT:    cmphs16 a0, l1
4307; GENERIC-NEXT:    mvcv16 a0
4308; GENERIC-NEXT:    cmpnei16 a1, 0
4309; GENERIC-NEXT:    mvcv16 a1
4310; GENERIC-NEXT:    btsti16 a1, 0
4311; GENERIC-NEXT:    bf16 .LBB106_5
4312; GENERIC-NEXT:  # %bb.1: # %entry
4313; GENERIC-NEXT:    btsti16 a0, 0
4314; GENERIC-NEXT:    bt16 .LBB106_6
4315; GENERIC-NEXT:  .LBB106_2: # %entry
4316; GENERIC-NEXT:    btsti16 a0, 0
4317; GENERIC-NEXT:    bf16 .LBB106_4
4318; GENERIC-NEXT:  .LBB106_3:
4319; GENERIC-NEXT:    ld16.w a3, (sp, 16)
4320; GENERIC-NEXT:  .LBB106_4: # %entry
4321; GENERIC-NEXT:    mov16 a0, a2
4322; GENERIC-NEXT:    mov16 a1, a3
4323; GENERIC-NEXT:    addi16 sp, sp, 4
4324; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4325; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
4326; GENERIC-NEXT:    addi16 sp, sp, 8
4327; GENERIC-NEXT:    rts16
4328; GENERIC-NEXT:  .LBB106_5: # %entry
4329; GENERIC-NEXT:    movi16 a0, 0
4330; GENERIC-NEXT:    btsti16 a0, 0
4331; GENERIC-NEXT:    bf16 .LBB106_2
4332; GENERIC-NEXT:  .LBB106_6:
4333; GENERIC-NEXT:    ld16.w a2, (sp, 12)
4334; GENERIC-NEXT:    btsti16 a0, 0
4335; GENERIC-NEXT:    bt16 .LBB106_3
4336; GENERIC-NEXT:    br32 .LBB106_4
4337entry:
4338  %icmp = icmp ule i64 %x, 47777777
4339  %ret = select i1 %icmp, i64 %m, i64 %n
4340  ret i64 %ret
4341}
4342
4343define i64 @selectC_ule_i64(i1 %c, i64 %n, i64 %m) {
4344; CHECK-LABEL: selectC_ule_i64:
4345; CHECK:       # %bb.0: # %entry
4346; CHECK-NEXT:    ld32.w t0, (sp, 0)
4347; CHECK-NEXT:    btsti32 a0, 0
4348; CHECK-NEXT:    movt32 a1, a3
4349; CHECK-NEXT:    movt32 a2, t0
4350; CHECK-NEXT:    mov16 a0, a1
4351; CHECK-NEXT:    mov16 a1, a2
4352; CHECK-NEXT:    rts16
4353;
4354; GENERIC-LABEL: selectC_ule_i64:
4355; GENERIC:       # %bb.0: # %entry
4356; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4357; GENERIC-NEXT:    subi16 sp, sp, 4
4358; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4359; GENERIC-NEXT:    btsti16 a0, 0
4360; GENERIC-NEXT:    bt16 .LBB107_2
4361; GENERIC-NEXT:  # %bb.1: # %entry
4362; GENERIC-NEXT:    mov16 a3, a1
4363; GENERIC-NEXT:  .LBB107_2: # %entry
4364; GENERIC-NEXT:    btsti16 a0, 0
4365; GENERIC-NEXT:    bf16 .LBB107_4
4366; GENERIC-NEXT:  # %bb.3:
4367; GENERIC-NEXT:    ld16.w a2, (sp, 4)
4368; GENERIC-NEXT:  .LBB107_4: # %entry
4369; GENERIC-NEXT:    mov16 a0, a3
4370; GENERIC-NEXT:    mov16 a1, a2
4371; GENERIC-NEXT:    addi16 sp, sp, 4
4372; GENERIC-NEXT:    rts16
4373entry:
4374  %ret = select i1 %c, i64 %m, i64 %n
4375  ret i64 %ret
4376}
4377
4378
4379define i16 @selectRR_ule_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
4380; CHECK-LABEL: selectRR_ule_i16:
4381; CHECK:       # %bb.0: # %entry
4382; CHECK-NEXT:    zexth16 a1, a1
4383; CHECK-NEXT:    zexth16 a0, a0
4384; CHECK-NEXT:    cmphs16 a0, a1
4385; CHECK-NEXT:    movt32 a2, a3
4386; CHECK-NEXT:    mov16 a0, a2
4387; CHECK-NEXT:    rts16
4388;
4389; GENERIC-LABEL: selectRR_ule_i16:
4390; GENERIC:       # %bb.0: # %entry
4391; GENERIC-NEXT:    subi16 sp, sp, 12
4392; GENERIC-NEXT:    .cfi_def_cfa_offset 12
4393; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
4394; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
4395; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4396; GENERIC-NEXT:    .cfi_offset l2, -4
4397; GENERIC-NEXT:    .cfi_offset l1, -8
4398; GENERIC-NEXT:    .cfi_offset l0, -12
4399; GENERIC-NEXT:    subi16 sp, sp, 4
4400; GENERIC-NEXT:    .cfi_def_cfa_offset 16
4401; GENERIC-NEXT:    movi16 l0, 0
4402; GENERIC-NEXT:    lsli16 l1, l0, 24
4403; GENERIC-NEXT:    lsli16 l0, l0, 16
4404; GENERIC-NEXT:    or16 l0, l1
4405; GENERIC-NEXT:    movi16 l1, 255
4406; GENERIC-NEXT:    lsli16 l2, l1, 8
4407; GENERIC-NEXT:    or16 l2, l0
4408; GENERIC-NEXT:    or16 l2, l1
4409; GENERIC-NEXT:    and16 a1, l2
4410; GENERIC-NEXT:    and16 l2, a0
4411; GENERIC-NEXT:    cmphs16 l2, a1
4412; GENERIC-NEXT:    mvcv16 a0
4413; GENERIC-NEXT:    movi16 a1, 1
4414; GENERIC-NEXT:    subu16 a1, a0
4415; GENERIC-NEXT:    btsti16 a1, 0
4416; GENERIC-NEXT:    bt16 .LBB108_2
4417; GENERIC-NEXT:  # %bb.1: # %entry
4418; GENERIC-NEXT:    mov16 a3, a2
4419; GENERIC-NEXT:  .LBB108_2: # %entry
4420; GENERIC-NEXT:    mov16 a0, a3
4421; GENERIC-NEXT:    addi16 sp, sp, 4
4422; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4423; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
4424; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
4425; GENERIC-NEXT:    addi16 sp, sp, 12
4426; GENERIC-NEXT:    rts16
4427entry:
4428  %icmp = icmp ule i16 %y, %x
4429  %ret = select i1 %icmp, i16 %m, i16 %n
4430  ret i16 %ret
4431}
4432
4433define i16 @selectRI_ule_i16(i16 %x, i16 %n, i16 %m) {
4434; CHECK-LABEL: selectRI_ule_i16:
4435; CHECK:       # %bb.0: # %entry
4436; CHECK-NEXT:    zexth16 a0, a0
4437; CHECK-NEXT:    cmphsi16 a0, 11
4438; CHECK-NEXT:    movf32 a1, a2
4439; CHECK-NEXT:    mov16 a0, a1
4440; CHECK-NEXT:    rts16
4441;
4442; GENERIC-LABEL: selectRI_ule_i16:
4443; GENERIC:       # %bb.0: # %entry
4444; GENERIC-NEXT:    subi16 sp, sp, 8
4445; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4446; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
4447; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4448; GENERIC-NEXT:    .cfi_offset l1, -4
4449; GENERIC-NEXT:    .cfi_offset l0, -8
4450; GENERIC-NEXT:    subi16 sp, sp, 4
4451; GENERIC-NEXT:    .cfi_def_cfa_offset 12
4452; GENERIC-NEXT:    movi16 a3, 0
4453; GENERIC-NEXT:    lsli16 l0, a3, 24
4454; GENERIC-NEXT:    lsli16 a3, a3, 16
4455; GENERIC-NEXT:    or16 a3, l0
4456; GENERIC-NEXT:    movi16 l0, 255
4457; GENERIC-NEXT:    lsli16 l1, l0, 8
4458; GENERIC-NEXT:    or16 l1, a3
4459; GENERIC-NEXT:    or16 l1, l0
4460; GENERIC-NEXT:    and16 l1, a0
4461; GENERIC-NEXT:    cmphsi16 l1, 11
4462; GENERIC-NEXT:    mvcv16 a0
4463; GENERIC-NEXT:    btsti16 a0, 0
4464; GENERIC-NEXT:    bt16 .LBB109_2
4465; GENERIC-NEXT:  # %bb.1: # %entry
4466; GENERIC-NEXT:    mov16 a2, a1
4467; GENERIC-NEXT:  .LBB109_2: # %entry
4468; GENERIC-NEXT:    mov16 a0, a2
4469; GENERIC-NEXT:    addi16 sp, sp, 4
4470; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4471; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
4472; GENERIC-NEXT:    addi16 sp, sp, 8
4473; GENERIC-NEXT:    rts16
4474entry:
4475  %icmp = icmp ule i16 %x, 10
4476  %ret = select i1 %icmp, i16 %m, i16 %n
4477  ret i16 %ret
4478}
4479
4480define i16 @selectRX_ule_i16(i16 %x, i16 %n, i16 %m) {
4481; CHECK-LABEL: selectRX_ule_i16:
4482; CHECK:       # %bb.0: # %entry
4483; CHECK-NEXT:    zexth16 a0, a0
4484; CHECK-NEXT:    cmphsi32 a0, 2034
4485; CHECK-NEXT:    movf32 a1, a2
4486; CHECK-NEXT:    mov16 a0, a1
4487; CHECK-NEXT:    rts16
4488;
4489; GENERIC-LABEL: selectRX_ule_i16:
4490; GENERIC:       # %bb.0: # %entry
4491; GENERIC-NEXT:    subi16 sp, sp, 8
4492; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4493; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
4494; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4495; GENERIC-NEXT:    .cfi_offset l1, -4
4496; GENERIC-NEXT:    .cfi_offset l0, -8
4497; GENERIC-NEXT:    subi16 sp, sp, 4
4498; GENERIC-NEXT:    .cfi_def_cfa_offset 12
4499; GENERIC-NEXT:    movi16 a3, 0
4500; GENERIC-NEXT:    lsli16 l0, a3, 24
4501; GENERIC-NEXT:    lsli16 a3, a3, 16
4502; GENERIC-NEXT:    or16 a3, l0
4503; GENERIC-NEXT:    movi16 l0, 255
4504; GENERIC-NEXT:    lsli16 l1, l0, 8
4505; GENERIC-NEXT:    or16 l1, a3
4506; GENERIC-NEXT:    or16 l1, l0
4507; GENERIC-NEXT:    and16 l1, a0
4508; GENERIC-NEXT:    movi16 a0, 7
4509; GENERIC-NEXT:    lsli16 a0, a0, 8
4510; GENERIC-NEXT:    or16 a0, a3
4511; GENERIC-NEXT:    movi16 a3, 242
4512; GENERIC-NEXT:    or16 a3, a0
4513; GENERIC-NEXT:    cmphs16 l1, a3
4514; GENERIC-NEXT:    mvcv16 a0
4515; GENERIC-NEXT:    btsti16 a0, 0
4516; GENERIC-NEXT:    bt16 .LBB110_2
4517; GENERIC-NEXT:  # %bb.1: # %entry
4518; GENERIC-NEXT:    mov16 a2, a1
4519; GENERIC-NEXT:  .LBB110_2: # %entry
4520; GENERIC-NEXT:    mov16 a0, a2
4521; GENERIC-NEXT:    addi16 sp, sp, 4
4522; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4523; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
4524; GENERIC-NEXT:    addi16 sp, sp, 8
4525; GENERIC-NEXT:    rts16
4526entry:
4527  %icmp = icmp ule i16 %x, 47777777
4528  %ret = select i1 %icmp, i16 %m, i16 %n
4529  ret i16 %ret
4530}
4531
4532define i16 @selectC_ule_i16(i1 %c, i16 %n, i16 %m) {
4533; CHECK-LABEL: selectC_ule_i16:
4534; CHECK:       # %bb.0: # %entry
4535; CHECK-NEXT:    btsti32 a0, 0
4536; CHECK-NEXT:    movt32 a1, a2
4537; CHECK-NEXT:    mov16 a0, a1
4538; CHECK-NEXT:    rts16
4539;
4540; GENERIC-LABEL: selectC_ule_i16:
4541; GENERIC:       # %bb.0: # %entry
4542; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4543; GENERIC-NEXT:    subi16 sp, sp, 4
4544; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4545; GENERIC-NEXT:    btsti16 a0, 0
4546; GENERIC-NEXT:    bt16 .LBB111_2
4547; GENERIC-NEXT:  # %bb.1: # %entry
4548; GENERIC-NEXT:    mov16 a2, a1
4549; GENERIC-NEXT:  .LBB111_2: # %entry
4550; GENERIC-NEXT:    mov16 a0, a2
4551; GENERIC-NEXT:    addi16 sp, sp, 4
4552; GENERIC-NEXT:    rts16
4553entry:
4554  %ret = select i1 %c, i16 %m, i16 %n
4555  ret i16 %ret
4556}
4557
4558
4559define i8 @selectRR_ule_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
4560; CHECK-LABEL: selectRR_ule_i8:
4561; CHECK:       # %bb.0: # %entry
4562; CHECK-NEXT:    zextb16 a1, a1
4563; CHECK-NEXT:    zextb16 a0, a0
4564; CHECK-NEXT:    cmphs16 a0, a1
4565; CHECK-NEXT:    movt32 a2, a3
4566; CHECK-NEXT:    mov16 a0, a2
4567; CHECK-NEXT:    rts16
4568;
4569; GENERIC-LABEL: selectRR_ule_i8:
4570; GENERIC:       # %bb.0: # %entry
4571; GENERIC-NEXT:    subi16 sp, sp, 4
4572; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4573; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4574; GENERIC-NEXT:    .cfi_offset l0, -4
4575; GENERIC-NEXT:    subi16 sp, sp, 4
4576; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4577; GENERIC-NEXT:    movi16 l0, 255
4578; GENERIC-NEXT:    and16 a1, l0
4579; GENERIC-NEXT:    and16 a0, l0
4580; GENERIC-NEXT:    cmphs16 a0, a1
4581; GENERIC-NEXT:    mvcv16 a0
4582; GENERIC-NEXT:    movi16 a1, 1
4583; GENERIC-NEXT:    subu16 a1, a0
4584; GENERIC-NEXT:    btsti16 a1, 0
4585; GENERIC-NEXT:    bt16 .LBB112_2
4586; GENERIC-NEXT:  # %bb.1: # %entry
4587; GENERIC-NEXT:    mov16 a3, a2
4588; GENERIC-NEXT:  .LBB112_2: # %entry
4589; GENERIC-NEXT:    mov16 a0, a3
4590; GENERIC-NEXT:    addi16 sp, sp, 4
4591; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4592; GENERIC-NEXT:    addi16 sp, sp, 4
4593; GENERIC-NEXT:    rts16
4594entry:
4595  %icmp = icmp ule i8 %y, %x
4596  %ret = select i1 %icmp, i8 %m, i8 %n
4597  ret i8 %ret
4598}
4599
4600define i8 @selectRI_ule_i8(i8 %x, i8 %n, i8 %m) {
4601; CHECK-LABEL: selectRI_ule_i8:
4602; CHECK:       # %bb.0: # %entry
4603; CHECK-NEXT:    zextb16 a0, a0
4604; CHECK-NEXT:    cmphsi16 a0, 11
4605; CHECK-NEXT:    movf32 a1, a2
4606; CHECK-NEXT:    mov16 a0, a1
4607; CHECK-NEXT:    rts16
4608;
4609; GENERIC-LABEL: selectRI_ule_i8:
4610; GENERIC:       # %bb.0: # %entry
4611; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4612; GENERIC-NEXT:    subi16 sp, sp, 4
4613; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4614; GENERIC-NEXT:    movi16 a3, 255
4615; GENERIC-NEXT:    and16 a3, a0
4616; GENERIC-NEXT:    cmphsi16 a3, 11
4617; GENERIC-NEXT:    mvcv16 a0
4618; GENERIC-NEXT:    btsti16 a0, 0
4619; GENERIC-NEXT:    bt16 .LBB113_2
4620; GENERIC-NEXT:  # %bb.1: # %entry
4621; GENERIC-NEXT:    mov16 a2, a1
4622; GENERIC-NEXT:  .LBB113_2: # %entry
4623; GENERIC-NEXT:    mov16 a0, a2
4624; GENERIC-NEXT:    addi16 sp, sp, 4
4625; GENERIC-NEXT:    rts16
4626entry:
4627  %icmp = icmp ule i8 %x, 10
4628  %ret = select i1 %icmp, i8 %m, i8 %n
4629  ret i8 %ret
4630}
4631
4632define i8 @selectRX_ule_i8(i8 %x, i8 %n, i8 %m) {
4633; CHECK-LABEL: selectRX_ule_i8:
4634; CHECK:       # %bb.0: # %entry
4635; CHECK-NEXT:    zextb16 a0, a0
4636; CHECK-NEXT:    cmphsi32 a0, 242
4637; CHECK-NEXT:    movf32 a1, a2
4638; CHECK-NEXT:    mov16 a0, a1
4639; CHECK-NEXT:    rts16
4640;
4641; GENERIC-LABEL: selectRX_ule_i8:
4642; GENERIC:       # %bb.0: # %entry
4643; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4644; GENERIC-NEXT:    subi16 sp, sp, 4
4645; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4646; GENERIC-NEXT:    movi16 a3, 255
4647; GENERIC-NEXT:    and16 a3, a0
4648; GENERIC-NEXT:    movi16 a0, 242
4649; GENERIC-NEXT:    cmphs16 a3, a0
4650; GENERIC-NEXT:    mvcv16 a0
4651; GENERIC-NEXT:    btsti16 a0, 0
4652; GENERIC-NEXT:    bt16 .LBB114_2
4653; GENERIC-NEXT:  # %bb.1: # %entry
4654; GENERIC-NEXT:    mov16 a2, a1
4655; GENERIC-NEXT:  .LBB114_2: # %entry
4656; GENERIC-NEXT:    mov16 a0, a2
4657; GENERIC-NEXT:    addi16 sp, sp, 4
4658; GENERIC-NEXT:    rts16
4659entry:
4660  %icmp = icmp ule i8 %x, 47777777
4661  %ret = select i1 %icmp, i8 %m, i8 %n
4662  ret i8 %ret
4663}
4664
4665define i8 @selectC_ule_i8(i1 %c, i8 %n, i8 %m) {
4666; CHECK-LABEL: selectC_ule_i8:
4667; CHECK:       # %bb.0: # %entry
4668; CHECK-NEXT:    btsti32 a0, 0
4669; CHECK-NEXT:    movt32 a1, a2
4670; CHECK-NEXT:    mov16 a0, a1
4671; CHECK-NEXT:    rts16
4672;
4673; GENERIC-LABEL: selectC_ule_i8:
4674; GENERIC:       # %bb.0: # %entry
4675; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4676; GENERIC-NEXT:    subi16 sp, sp, 4
4677; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4678; GENERIC-NEXT:    btsti16 a0, 0
4679; GENERIC-NEXT:    bt16 .LBB115_2
4680; GENERIC-NEXT:  # %bb.1: # %entry
4681; GENERIC-NEXT:    mov16 a2, a1
4682; GENERIC-NEXT:  .LBB115_2: # %entry
4683; GENERIC-NEXT:    mov16 a0, a2
4684; GENERIC-NEXT:    addi16 sp, sp, 4
4685; GENERIC-NEXT:    rts16
4686entry:
4687  %ret = select i1 %c, i8 %m, i8 %n
4688  ret i8 %ret
4689}
4690
4691
4692define i1 @selectRR_ule_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
4693; CHECK-LABEL: selectRR_ule_i1:
4694; CHECK:       # %bb.0: # %entry
4695; CHECK-NEXT:    btsti32 a1, 0
4696; CHECK-NEXT:    mov16 a1, a3
4697; CHECK-NEXT:    movt32 a1, a2
4698; CHECK-NEXT:    btsti32 a0, 0
4699; CHECK-NEXT:    movt32 a1, a3
4700; CHECK-NEXT:    mov16 a0, a1
4701; CHECK-NEXT:    rts16
4702;
4703; GENERIC-LABEL: selectRR_ule_i1:
4704; GENERIC:       # %bb.0: # %entry
4705; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4706; GENERIC-NEXT:    subi16 sp, sp, 4
4707; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4708; GENERIC-NEXT:    btsti16 a1, 0
4709; GENERIC-NEXT:    bt16 .LBB116_2
4710; GENERIC-NEXT:  # %bb.1: # %entry
4711; GENERIC-NEXT:    mov16 a2, a3
4712; GENERIC-NEXT:  .LBB116_2: # %entry
4713; GENERIC-NEXT:    btsti16 a0, 0
4714; GENERIC-NEXT:    bt16 .LBB116_4
4715; GENERIC-NEXT:  # %bb.3: # %entry
4716; GENERIC-NEXT:    mov16 a3, a2
4717; GENERIC-NEXT:  .LBB116_4: # %entry
4718; GENERIC-NEXT:    mov16 a0, a3
4719; GENERIC-NEXT:    addi16 sp, sp, 4
4720; GENERIC-NEXT:    rts16
4721entry:
4722  %icmp = icmp ule i1 %y, %x
4723  %ret = select i1 %icmp, i1 %m, i1 %n
4724  ret i1 %ret
4725}
4726
4727define i1 @selectRI_ule_i1(i1 %x, i1 %n, i1 %m) {
4728; CHECK-LABEL: selectRI_ule_i1:
4729; CHECK:       # %bb.0: # %entry
4730; CHECK-NEXT:    btsti32 a0, 0
4731; CHECK-NEXT:    movt32 a2, a1
4732; CHECK-NEXT:    mov16 a0, a2
4733; CHECK-NEXT:    rts16
4734;
4735; GENERIC-LABEL: selectRI_ule_i1:
4736; GENERIC:       # %bb.0: # %entry
4737; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4738; GENERIC-NEXT:    subi16 sp, sp, 4
4739; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4740; GENERIC-NEXT:    btsti16 a0, 0
4741; GENERIC-NEXT:    bt16 .LBB117_2
4742; GENERIC-NEXT:  # %bb.1: # %entry
4743; GENERIC-NEXT:    mov16 a1, a2
4744; GENERIC-NEXT:  .LBB117_2: # %entry
4745; GENERIC-NEXT:    mov16 a0, a1
4746; GENERIC-NEXT:    addi16 sp, sp, 4
4747; GENERIC-NEXT:    rts16
4748entry:
4749  %icmp = icmp ule i1 %x, 10
4750  %ret = select i1 %icmp, i1 %m, i1 %n
4751  ret i1 %ret
4752}
4753
4754define i1 @selectRX_ule_i1(i1 %x, i1 %n, i1 %m) {
4755; CHECK-LABEL: selectRX_ule_i1:
4756; CHECK:       # %bb.0: # %entry
4757; CHECK-NEXT:    mov16 a0, a2
4758; CHECK-NEXT:    rts16
4759;
4760; GENERIC-LABEL: selectRX_ule_i1:
4761; GENERIC:       # %bb.0: # %entry
4762; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4763; GENERIC-NEXT:    subi16 sp, sp, 4
4764; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4765; GENERIC-NEXT:    mov16 a0, a2
4766; GENERIC-NEXT:    addi16 sp, sp, 4
4767; GENERIC-NEXT:    rts16
4768entry:
4769  %icmp = icmp ule i1 %x, 47777777
4770  %ret = select i1 %icmp, i1 %m, i1 %n
4771  ret i1 %ret
4772}
4773
4774define i1 @selectC_ule_i1(i1 %c, i1 %n, i1 %m) {
4775; CHECK-LABEL: selectC_ule_i1:
4776; CHECK:       # %bb.0: # %entry
4777; CHECK-NEXT:    btsti32 a0, 0
4778; CHECK-NEXT:    movt32 a1, a2
4779; CHECK-NEXT:    mov16 a0, a1
4780; CHECK-NEXT:    rts16
4781;
4782; GENERIC-LABEL: selectC_ule_i1:
4783; GENERIC:       # %bb.0: # %entry
4784; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4785; GENERIC-NEXT:    subi16 sp, sp, 4
4786; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4787; GENERIC-NEXT:    btsti16 a0, 0
4788; GENERIC-NEXT:    bt16 .LBB119_2
4789; GENERIC-NEXT:  # %bb.1: # %entry
4790; GENERIC-NEXT:    mov16 a2, a1
4791; GENERIC-NEXT:  .LBB119_2: # %entry
4792; GENERIC-NEXT:    mov16 a0, a2
4793; GENERIC-NEXT:    addi16 sp, sp, 4
4794; GENERIC-NEXT:    rts16
4795entry:
4796  %ret = select i1 %c, i1 %m, i1 %n
4797  ret i1 %ret
4798}
4799
4800
4801define i32 @selectRR_sgt_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
4802; CHECK-LABEL: selectRR_sgt_i32:
4803; CHECK:       # %bb.0: # %entry
4804; CHECK-NEXT:    cmplt16 a0, a1
4805; CHECK-NEXT:    movt32 a2, a3
4806; CHECK-NEXT:    mov16 a0, a2
4807; CHECK-NEXT:    rts16
4808;
4809; GENERIC-LABEL: selectRR_sgt_i32:
4810; GENERIC:       # %bb.0: # %entry
4811; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4812; GENERIC-NEXT:    subi16 sp, sp, 4
4813; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4814; GENERIC-NEXT:    cmplt16 a0, a1
4815; GENERIC-NEXT:    mvcv16 a0
4816; GENERIC-NEXT:    movi16 a1, 1
4817; GENERIC-NEXT:    subu16 a1, a0
4818; GENERIC-NEXT:    btsti16 a1, 0
4819; GENERIC-NEXT:    bt16 .LBB120_2
4820; GENERIC-NEXT:  # %bb.1: # %entry
4821; GENERIC-NEXT:    mov16 a3, a2
4822; GENERIC-NEXT:  .LBB120_2: # %entry
4823; GENERIC-NEXT:    mov16 a0, a3
4824; GENERIC-NEXT:    addi16 sp, sp, 4
4825; GENERIC-NEXT:    rts16
4826entry:
4827  %icmp = icmp sgt i32 %y, %x
4828  %ret = select i1 %icmp, i32 %m, i32 %n
4829  ret i32 %ret
4830}
4831
4832define i32 @selectRI_sgt_i32(i32 %x, i32 %n, i32 %m) {
4833; CHECK-LABEL: selectRI_sgt_i32:
4834; CHECK:       # %bb.0: # %entry
4835; CHECK-NEXT:    movi16 a3, 10
4836; CHECK-NEXT:    cmplt16 a3, a0
4837; CHECK-NEXT:    movt32 a1, a2
4838; CHECK-NEXT:    mov16 a0, a1
4839; CHECK-NEXT:    rts16
4840;
4841; GENERIC-LABEL: selectRI_sgt_i32:
4842; GENERIC:       # %bb.0: # %entry
4843; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4844; GENERIC-NEXT:    subi16 sp, sp, 4
4845; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4846; GENERIC-NEXT:    movi16 a3, 10
4847; GENERIC-NEXT:    cmplt16 a3, a0
4848; GENERIC-NEXT:    mvcv16 a0
4849; GENERIC-NEXT:    movi16 a3, 1
4850; GENERIC-NEXT:    subu16 a3, a0
4851; GENERIC-NEXT:    btsti16 a3, 0
4852; GENERIC-NEXT:    bt16 .LBB121_2
4853; GENERIC-NEXT:  # %bb.1: # %entry
4854; GENERIC-NEXT:    mov16 a2, a1
4855; GENERIC-NEXT:  .LBB121_2: # %entry
4856; GENERIC-NEXT:    mov16 a0, a2
4857; GENERIC-NEXT:    addi16 sp, sp, 4
4858; GENERIC-NEXT:    rts16
4859entry:
4860  %icmp = icmp sgt i32 %x, 10
4861  %ret = select i1 %icmp, i32 %m, i32 %n
4862  ret i32 %ret
4863}
4864
4865define i32 @selectRX_sgt_i32(i32 %x, i32 %n, i32 %m) {
4866; CHECK-LABEL: selectRX_sgt_i32:
4867; CHECK:       # %bb.0: # %entry
4868; CHECK-NEXT:    movih32 a3, 729
4869; CHECK-NEXT:    ori32 a3, a3, 2033
4870; CHECK-NEXT:    cmplt16 a3, a0
4871; CHECK-NEXT:    movt32 a1, a2
4872; CHECK-NEXT:    mov16 a0, a1
4873; CHECK-NEXT:    rts16
4874;
4875; GENERIC-LABEL: selectRX_sgt_i32:
4876; GENERIC:       # %bb.0: # %entry
4877; GENERIC-NEXT:    subi16 sp, sp, 4
4878; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4879; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4880; GENERIC-NEXT:    .cfi_offset l0, -4
4881; GENERIC-NEXT:    subi16 sp, sp, 4
4882; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4883; GENERIC-NEXT:    movi16 a3, 2
4884; GENERIC-NEXT:    lsli16 a3, a3, 24
4885; GENERIC-NEXT:    movi16 l0, 217
4886; GENERIC-NEXT:    lsli16 l0, l0, 16
4887; GENERIC-NEXT:    or16 l0, a3
4888; GENERIC-NEXT:    movi16 a3, 7
4889; GENERIC-NEXT:    lsli16 a3, a3, 8
4890; GENERIC-NEXT:    or16 a3, l0
4891; GENERIC-NEXT:    movi16 l0, 241
4892; GENERIC-NEXT:    or16 l0, a3
4893; GENERIC-NEXT:    cmplt16 l0, a0
4894; GENERIC-NEXT:    mvcv16 a0
4895; GENERIC-NEXT:    movi16 a3, 1
4896; GENERIC-NEXT:    subu16 a3, a0
4897; GENERIC-NEXT:    btsti16 a3, 0
4898; GENERIC-NEXT:    bt16 .LBB122_2
4899; GENERIC-NEXT:  # %bb.1: # %entry
4900; GENERIC-NEXT:    mov16 a2, a1
4901; GENERIC-NEXT:  .LBB122_2: # %entry
4902; GENERIC-NEXT:    mov16 a0, a2
4903; GENERIC-NEXT:    addi16 sp, sp, 4
4904; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
4905; GENERIC-NEXT:    addi16 sp, sp, 4
4906; GENERIC-NEXT:    rts16
4907entry:
4908  %icmp = icmp sgt i32 %x, 47777777
4909  %ret = select i1 %icmp, i32 %m, i32 %n
4910  ret i32 %ret
4911}
4912
4913define i32 @selectC_sgt_i32(i1 %c, i32 %n, i32 %m) {
4914; CHECK-LABEL: selectC_sgt_i32:
4915; CHECK:       # %bb.0: # %entry
4916; CHECK-NEXT:    btsti32 a0, 0
4917; CHECK-NEXT:    movt32 a1, a2
4918; CHECK-NEXT:    mov16 a0, a1
4919; CHECK-NEXT:    rts16
4920;
4921; GENERIC-LABEL: selectC_sgt_i32:
4922; GENERIC:       # %bb.0: # %entry
4923; GENERIC-NEXT:    .cfi_def_cfa_offset 0
4924; GENERIC-NEXT:    subi16 sp, sp, 4
4925; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4926; GENERIC-NEXT:    btsti16 a0, 0
4927; GENERIC-NEXT:    bt16 .LBB123_2
4928; GENERIC-NEXT:  # %bb.1: # %entry
4929; GENERIC-NEXT:    mov16 a2, a1
4930; GENERIC-NEXT:  .LBB123_2: # %entry
4931; GENERIC-NEXT:    mov16 a0, a2
4932; GENERIC-NEXT:    addi16 sp, sp, 4
4933; GENERIC-NEXT:    rts16
4934entry:
4935  %ret = select i1 %c, i32 %m, i32 %n
4936  ret i32 %ret
4937}
4938
4939define i64 @selectRR_sgt_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
4940; CHECK-LABEL: selectRR_sgt_i64:
4941; CHECK:       # %bb.0: # %entry
4942; CHECK-NEXT:    .cfi_def_cfa_offset 0
4943; CHECK-NEXT:    subi16 sp, sp, 12
4944; CHECK-NEXT:    .cfi_def_cfa_offset 12
4945; CHECK-NEXT:    cmplt16 a1, a3
4946; CHECK-NEXT:    mvc32 t0
4947; CHECK-NEXT:    st32.w t0, (sp, 4)
4948; CHECK-NEXT:    cmpne16 a3, a1
4949; CHECK-NEXT:    mvc32 a1
4950; CHECK-NEXT:    st16.w a1, (sp, 8)
4951; CHECK-NEXT:    cmphs16 a0, a2
4952; CHECK-NEXT:    mvcv16 a0
4953; CHECK-NEXT:    ld16.w a1, (sp, 4)
4954; CHECK-NEXT:    btsti32 a1, 0
4955; CHECK-NEXT:    mvc32 a1
4956; CHECK-NEXT:    ld16.w a2, (sp, 8)
4957; CHECK-NEXT:    btsti32 a2, 0
4958; CHECK-NEXT:    movf32 a1, a0
4959; CHECK-NEXT:    addi16 a2, sp, 12
4960; CHECK-NEXT:    addi16 a0, sp, 20
4961; CHECK-NEXT:    btsti32 a1, 0
4962; CHECK-NEXT:    movt32 a2, a0
4963; CHECK-NEXT:    ld16.w a0, (a2, 0)
4964; CHECK-NEXT:    ld16.w a1, (a2, 4)
4965; CHECK-NEXT:    addi16 sp, sp, 12
4966; CHECK-NEXT:    rts16
4967;
4968; GENERIC-LABEL: selectRR_sgt_i64:
4969; GENERIC:       # %bb.0: # %entry
4970; GENERIC-NEXT:    subi16 sp, sp, 4
4971; GENERIC-NEXT:    .cfi_def_cfa_offset 4
4972; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
4973; GENERIC-NEXT:    .cfi_offset l0, -4
4974; GENERIC-NEXT:    subi16 sp, sp, 4
4975; GENERIC-NEXT:    .cfi_def_cfa_offset 8
4976; GENERIC-NEXT:    cmplt16 a1, a3
4977; GENERIC-NEXT:    mvcv16 l0
4978; GENERIC-NEXT:    cmphs16 a0, a2
4979; GENERIC-NEXT:    mvcv16 a0
4980; GENERIC-NEXT:    cmpne16 a3, a1
4981; GENERIC-NEXT:    mvcv16 a1
4982; GENERIC-NEXT:    btsti16 a1, 0
4983; GENERIC-NEXT:    bt16 .LBB124_2
4984; GENERIC-NEXT:  # %bb.1: # %entry
4985; GENERIC-NEXT:    movi16 a0, 1
4986; GENERIC-NEXT:    subu16 a0, l0
4987; GENERIC-NEXT:  .LBB124_2: # %entry
4988; GENERIC-NEXT:    btsti16 a0, 0
4989; GENERIC-NEXT:    bt16 .LBB124_4
4990; GENERIC-NEXT:  # %bb.3: # %entry
4991; GENERIC-NEXT:    movi16 a0, 8
4992; GENERIC-NEXT:    br32 .LBB124_5
4993; GENERIC-NEXT:  .LBB124_4:
4994; GENERIC-NEXT:    movi16 a0, 16
4995; GENERIC-NEXT:  .LBB124_5: # %entry
4996; GENERIC-NEXT:    addu16 a0, sp
4997; GENERIC-NEXT:    mov16 a1, a0
4998; GENERIC-NEXT:    ld16.w a0, (a0, 0)
4999; GENERIC-NEXT:    ld16.w a1, (a1, 4)
5000; GENERIC-NEXT:    addi16 sp, sp, 4
5001; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5002; GENERIC-NEXT:    addi16 sp, sp, 4
5003; GENERIC-NEXT:    rts16
5004entry:
5005  %icmp = icmp sgt i64 %y, %x
5006  %ret = select i1 %icmp, i64 %m, i64 %n
5007  ret i64 %ret
5008}
5009
5010define i64 @selectRI_sgt_i64(i64 %x, i64 %n, i64 %m) {
5011; CHECK-LABEL: selectRI_sgt_i64:
5012; CHECK:       # %bb.0: # %entry
5013; CHECK-NEXT:    subi16 sp, sp, 4
5014; CHECK-NEXT:    .cfi_def_cfa_offset 4
5015; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5016; CHECK-NEXT:    .cfi_offset l0, -4
5017; CHECK-NEXT:    subi16 sp, sp, 12
5018; CHECK-NEXT:    .cfi_def_cfa_offset 16
5019; CHECK-NEXT:    ld32.w t0, (sp, 20)
5020; CHECK-NEXT:    ld32.w t1, (sp, 16)
5021; CHECK-NEXT:    movi16 l0, 0
5022; CHECK-NEXT:    cmplt16 l0, a1
5023; CHECK-NEXT:    mvc32 l0
5024; CHECK-NEXT:    st16.w l0, (sp, 8)
5025; CHECK-NEXT:    movi16 l0, 10
5026; CHECK-NEXT:    cmphs16 l0, a0
5027; CHECK-NEXT:    mvcv16 a0
5028; CHECK-NEXT:    cmpnei16 a1, 0
5029; CHECK-NEXT:    mvc32 a1
5030; CHECK-NEXT:    st16.w a1, (sp, 4)
5031; CHECK-NEXT:    ld16.w a1, (sp, 8)
5032; CHECK-NEXT:    btsti32 a1, 0
5033; CHECK-NEXT:    mvc32 a1
5034; CHECK-NEXT:    ld16.w l0, (sp, 4)
5035; CHECK-NEXT:    btsti32 l0, 0
5036; CHECK-NEXT:    movf32 a1, a0
5037; CHECK-NEXT:    btsti32 a1, 0
5038; CHECK-NEXT:    movt32 a2, t1
5039; CHECK-NEXT:    movt32 a3, t0
5040; CHECK-NEXT:    mov16 a0, a2
5041; CHECK-NEXT:    mov16 a1, a3
5042; CHECK-NEXT:    addi16 sp, sp, 12
5043; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5044; CHECK-NEXT:    addi16 sp, sp, 4
5045; CHECK-NEXT:    rts16
5046;
5047; GENERIC-LABEL: selectRI_sgt_i64:
5048; GENERIC:       # %bb.0: # %entry
5049; GENERIC-NEXT:    subi16 sp, sp, 8
5050; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5051; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
5052; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5053; GENERIC-NEXT:    .cfi_offset l1, -4
5054; GENERIC-NEXT:    .cfi_offset l0, -8
5055; GENERIC-NEXT:    subi16 sp, sp, 4
5056; GENERIC-NEXT:    .cfi_def_cfa_offset 12
5057; GENERIC-NEXT:    movi16 l0, 0
5058; GENERIC-NEXT:    cmplt16 l0, a1
5059; GENERIC-NEXT:    mvcv16 l0
5060; GENERIC-NEXT:    movi16 l1, 10
5061; GENERIC-NEXT:    cmphs16 l1, a0
5062; GENERIC-NEXT:    mvcv16 a0
5063; GENERIC-NEXT:    cmpnei16 a1, 0
5064; GENERIC-NEXT:    mvcv16 a1
5065; GENERIC-NEXT:    btsti16 a1, 0
5066; GENERIC-NEXT:    bf16 .LBB125_5
5067; GENERIC-NEXT:  # %bb.1: # %entry
5068; GENERIC-NEXT:    btsti16 a0, 0
5069; GENERIC-NEXT:    bt16 .LBB125_6
5070; GENERIC-NEXT:  .LBB125_2: # %entry
5071; GENERIC-NEXT:    btsti16 a0, 0
5072; GENERIC-NEXT:    bf16 .LBB125_4
5073; GENERIC-NEXT:  .LBB125_3:
5074; GENERIC-NEXT:    ld16.w a3, (sp, 16)
5075; GENERIC-NEXT:  .LBB125_4: # %entry
5076; GENERIC-NEXT:    mov16 a0, a2
5077; GENERIC-NEXT:    mov16 a1, a3
5078; GENERIC-NEXT:    addi16 sp, sp, 4
5079; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5080; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
5081; GENERIC-NEXT:    addi16 sp, sp, 8
5082; GENERIC-NEXT:    rts16
5083; GENERIC-NEXT:  .LBB125_5: # %entry
5084; GENERIC-NEXT:    movi16 a0, 1
5085; GENERIC-NEXT:    subu16 a0, l0
5086; GENERIC-NEXT:    btsti16 a0, 0
5087; GENERIC-NEXT:    bf16 .LBB125_2
5088; GENERIC-NEXT:  .LBB125_6:
5089; GENERIC-NEXT:    ld16.w a2, (sp, 12)
5090; GENERIC-NEXT:    btsti16 a0, 0
5091; GENERIC-NEXT:    bt16 .LBB125_3
5092; GENERIC-NEXT:    br32 .LBB125_4
5093entry:
5094  %icmp = icmp sgt i64 %x, 10
5095  %ret = select i1 %icmp, i64 %m, i64 %n
5096  ret i64 %ret
5097}
5098
5099define i64 @selectRX_sgt_i64(i64 %x, i64 %n, i64 %m) {
5100; CHECK-LABEL: selectRX_sgt_i64:
5101; CHECK:       # %bb.0: # %entry
5102; CHECK-NEXT:    subi16 sp, sp, 4
5103; CHECK-NEXT:    .cfi_def_cfa_offset 4
5104; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5105; CHECK-NEXT:    .cfi_offset l0, -4
5106; CHECK-NEXT:    subi16 sp, sp, 12
5107; CHECK-NEXT:    .cfi_def_cfa_offset 16
5108; CHECK-NEXT:    ld32.w t0, (sp, 20)
5109; CHECK-NEXT:    ld32.w t1, (sp, 16)
5110; CHECK-NEXT:    movi16 l0, 0
5111; CHECK-NEXT:    cmplt16 l0, a1
5112; CHECK-NEXT:    mvc32 l0
5113; CHECK-NEXT:    st16.w l0, (sp, 8)
5114; CHECK-NEXT:    movih32 l0, 729
5115; CHECK-NEXT:    ori32 l0, l0, 2033
5116; CHECK-NEXT:    cmphs16 l0, a0
5117; CHECK-NEXT:    mvcv16 a0
5118; CHECK-NEXT:    cmpnei16 a1, 0
5119; CHECK-NEXT:    mvc32 a1
5120; CHECK-NEXT:    st16.w a1, (sp, 4)
5121; CHECK-NEXT:    ld16.w a1, (sp, 8)
5122; CHECK-NEXT:    btsti32 a1, 0
5123; CHECK-NEXT:    mvc32 a1
5124; CHECK-NEXT:    ld16.w l0, (sp, 4)
5125; CHECK-NEXT:    btsti32 l0, 0
5126; CHECK-NEXT:    movf32 a1, a0
5127; CHECK-NEXT:    btsti32 a1, 0
5128; CHECK-NEXT:    movt32 a2, t1
5129; CHECK-NEXT:    movt32 a3, t0
5130; CHECK-NEXT:    mov16 a0, a2
5131; CHECK-NEXT:    mov16 a1, a3
5132; CHECK-NEXT:    addi16 sp, sp, 12
5133; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5134; CHECK-NEXT:    addi16 sp, sp, 4
5135; CHECK-NEXT:    rts16
5136;
5137; GENERIC-LABEL: selectRX_sgt_i64:
5138; GENERIC:       # %bb.0: # %entry
5139; GENERIC-NEXT:    subi16 sp, sp, 12
5140; GENERIC-NEXT:    .cfi_def_cfa_offset 12
5141; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
5142; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
5143; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5144; GENERIC-NEXT:    .cfi_offset l2, -4
5145; GENERIC-NEXT:    .cfi_offset l1, -8
5146; GENERIC-NEXT:    .cfi_offset l0, -12
5147; GENERIC-NEXT:    subi16 sp, sp, 4
5148; GENERIC-NEXT:    .cfi_def_cfa_offset 16
5149; GENERIC-NEXT:    movi16 l0, 0
5150; GENERIC-NEXT:    cmplt16 l0, a1
5151; GENERIC-NEXT:    mvcv16 l0
5152; GENERIC-NEXT:    movi16 l1, 2
5153; GENERIC-NEXT:    lsli16 l1, l1, 24
5154; GENERIC-NEXT:    movi16 l2, 217
5155; GENERIC-NEXT:    lsli16 l2, l2, 16
5156; GENERIC-NEXT:    or16 l2, l1
5157; GENERIC-NEXT:    movi16 l1, 7
5158; GENERIC-NEXT:    lsli16 l1, l1, 8
5159; GENERIC-NEXT:    or16 l1, l2
5160; GENERIC-NEXT:    movi16 l2, 241
5161; GENERIC-NEXT:    or16 l2, l1
5162; GENERIC-NEXT:    cmphs16 l2, a0
5163; GENERIC-NEXT:    mvcv16 a0
5164; GENERIC-NEXT:    cmpnei16 a1, 0
5165; GENERIC-NEXT:    mvcv16 a1
5166; GENERIC-NEXT:    btsti16 a1, 0
5167; GENERIC-NEXT:    bf16 .LBB126_5
5168; GENERIC-NEXT:  # %bb.1: # %entry
5169; GENERIC-NEXT:    btsti16 a0, 0
5170; GENERIC-NEXT:    bt16 .LBB126_6
5171; GENERIC-NEXT:  .LBB126_2: # %entry
5172; GENERIC-NEXT:    btsti16 a0, 0
5173; GENERIC-NEXT:    bf16 .LBB126_4
5174; GENERIC-NEXT:  .LBB126_3:
5175; GENERIC-NEXT:    ld16.w a3, (sp, 20)
5176; GENERIC-NEXT:  .LBB126_4: # %entry
5177; GENERIC-NEXT:    mov16 a0, a2
5178; GENERIC-NEXT:    mov16 a1, a3
5179; GENERIC-NEXT:    addi16 sp, sp, 4
5180; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5181; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
5182; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
5183; GENERIC-NEXT:    addi16 sp, sp, 12
5184; GENERIC-NEXT:    rts16
5185; GENERIC-NEXT:  .LBB126_5: # %entry
5186; GENERIC-NEXT:    movi16 a0, 1
5187; GENERIC-NEXT:    subu16 a0, l0
5188; GENERIC-NEXT:    btsti16 a0, 0
5189; GENERIC-NEXT:    bf16 .LBB126_2
5190; GENERIC-NEXT:  .LBB126_6:
5191; GENERIC-NEXT:    ld16.w a2, (sp, 16)
5192; GENERIC-NEXT:    btsti16 a0, 0
5193; GENERIC-NEXT:    bt16 .LBB126_3
5194; GENERIC-NEXT:    br32 .LBB126_4
5195entry:
5196  %icmp = icmp sgt i64 %x, 47777777
5197  %ret = select i1 %icmp, i64 %m, i64 %n
5198  ret i64 %ret
5199}
5200
5201define i64 @selectC_sgt_i64(i1 %c, i64 %n, i64 %m) {
5202; CHECK-LABEL: selectC_sgt_i64:
5203; CHECK:       # %bb.0: # %entry
5204; CHECK-NEXT:    ld32.w t0, (sp, 0)
5205; CHECK-NEXT:    btsti32 a0, 0
5206; CHECK-NEXT:    movt32 a1, a3
5207; CHECK-NEXT:    movt32 a2, t0
5208; CHECK-NEXT:    mov16 a0, a1
5209; CHECK-NEXT:    mov16 a1, a2
5210; CHECK-NEXT:    rts16
5211;
5212; GENERIC-LABEL: selectC_sgt_i64:
5213; GENERIC:       # %bb.0: # %entry
5214; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5215; GENERIC-NEXT:    subi16 sp, sp, 4
5216; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5217; GENERIC-NEXT:    btsti16 a0, 0
5218; GENERIC-NEXT:    bt16 .LBB127_2
5219; GENERIC-NEXT:  # %bb.1: # %entry
5220; GENERIC-NEXT:    mov16 a3, a1
5221; GENERIC-NEXT:  .LBB127_2: # %entry
5222; GENERIC-NEXT:    btsti16 a0, 0
5223; GENERIC-NEXT:    bf16 .LBB127_4
5224; GENERIC-NEXT:  # %bb.3:
5225; GENERIC-NEXT:    ld16.w a2, (sp, 4)
5226; GENERIC-NEXT:  .LBB127_4: # %entry
5227; GENERIC-NEXT:    mov16 a0, a3
5228; GENERIC-NEXT:    mov16 a1, a2
5229; GENERIC-NEXT:    addi16 sp, sp, 4
5230; GENERIC-NEXT:    rts16
5231entry:
5232  %ret = select i1 %c, i64 %m, i64 %n
5233  ret i64 %ret
5234}
5235
5236
5237define i16 @selectRR_sgt_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
5238; CHECK-LABEL: selectRR_sgt_i16:
5239; CHECK:       # %bb.0: # %entry
5240; CHECK-NEXT:    sexth16 a1, a1
5241; CHECK-NEXT:    sexth16 a0, a0
5242; CHECK-NEXT:    cmplt16 a0, a1
5243; CHECK-NEXT:    movt32 a2, a3
5244; CHECK-NEXT:    mov16 a0, a2
5245; CHECK-NEXT:    rts16
5246;
5247; GENERIC-LABEL: selectRR_sgt_i16:
5248; GENERIC:       # %bb.0: # %entry
5249; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5250; GENERIC-NEXT:    subi16 sp, sp, 4
5251; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5252; GENERIC-NEXT:    sexth16 a1, a1
5253; GENERIC-NEXT:    sexth16 a0, a0
5254; GENERIC-NEXT:    cmplt16 a0, a1
5255; GENERIC-NEXT:    mvcv16 a0
5256; GENERIC-NEXT:    movi16 a1, 1
5257; GENERIC-NEXT:    subu16 a1, a0
5258; GENERIC-NEXT:    btsti16 a1, 0
5259; GENERIC-NEXT:    bt16 .LBB128_2
5260; GENERIC-NEXT:  # %bb.1: # %entry
5261; GENERIC-NEXT:    mov16 a3, a2
5262; GENERIC-NEXT:  .LBB128_2: # %entry
5263; GENERIC-NEXT:    mov16 a0, a3
5264; GENERIC-NEXT:    addi16 sp, sp, 4
5265; GENERIC-NEXT:    rts16
5266entry:
5267  %icmp = icmp sgt i16 %y, %x
5268  %ret = select i1 %icmp, i16 %m, i16 %n
5269  ret i16 %ret
5270}
5271
5272define i16 @selectRI_sgt_i16(i16 %x, i16 %n, i16 %m) {
5273; CHECK-LABEL: selectRI_sgt_i16:
5274; CHECK:       # %bb.0: # %entry
5275; CHECK-NEXT:    sexth16 a0, a0
5276; CHECK-NEXT:    movi16 a3, 10
5277; CHECK-NEXT:    cmplt16 a3, a0
5278; CHECK-NEXT:    movt32 a1, a2
5279; CHECK-NEXT:    mov16 a0, a1
5280; CHECK-NEXT:    rts16
5281;
5282; GENERIC-LABEL: selectRI_sgt_i16:
5283; GENERIC:       # %bb.0: # %entry
5284; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5285; GENERIC-NEXT:    subi16 sp, sp, 4
5286; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5287; GENERIC-NEXT:    sexth16 a0, a0
5288; GENERIC-NEXT:    movi16 a3, 10
5289; GENERIC-NEXT:    cmplt16 a3, a0
5290; GENERIC-NEXT:    mvcv16 a0
5291; GENERIC-NEXT:    movi16 a3, 1
5292; GENERIC-NEXT:    subu16 a3, a0
5293; GENERIC-NEXT:    btsti16 a3, 0
5294; GENERIC-NEXT:    bt16 .LBB129_2
5295; GENERIC-NEXT:  # %bb.1: # %entry
5296; GENERIC-NEXT:    mov16 a2, a1
5297; GENERIC-NEXT:  .LBB129_2: # %entry
5298; GENERIC-NEXT:    mov16 a0, a2
5299; GENERIC-NEXT:    addi16 sp, sp, 4
5300; GENERIC-NEXT:    rts16
5301entry:
5302  %icmp = icmp sgt i16 %x, 10
5303  %ret = select i1 %icmp, i16 %m, i16 %n
5304  ret i16 %ret
5305}
5306
5307define i16 @selectRX_sgt_i16(i16 %x, i16 %n, i16 %m) {
5308; CHECK-LABEL: selectRX_sgt_i16:
5309; CHECK:       # %bb.0: # %entry
5310; CHECK-NEXT:    sexth16 a0, a0
5311; CHECK-NEXT:    movi32 a3, 2033
5312; CHECK-NEXT:    cmplt16 a3, a0
5313; CHECK-NEXT:    movt32 a1, a2
5314; CHECK-NEXT:    mov16 a0, a1
5315; CHECK-NEXT:    rts16
5316;
5317; GENERIC-LABEL: selectRX_sgt_i16:
5318; GENERIC:       # %bb.0: # %entry
5319; GENERIC-NEXT:    subi16 sp, sp, 4
5320; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5321; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5322; GENERIC-NEXT:    .cfi_offset l0, -4
5323; GENERIC-NEXT:    subi16 sp, sp, 4
5324; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5325; GENERIC-NEXT:    sexth16 a0, a0
5326; GENERIC-NEXT:    movi16 a3, 0
5327; GENERIC-NEXT:    lsli16 l0, a3, 24
5328; GENERIC-NEXT:    lsli16 a3, a3, 16
5329; GENERIC-NEXT:    or16 a3, l0
5330; GENERIC-NEXT:    movi16 l0, 7
5331; GENERIC-NEXT:    lsli16 l0, l0, 8
5332; GENERIC-NEXT:    or16 l0, a3
5333; GENERIC-NEXT:    movi16 a3, 241
5334; GENERIC-NEXT:    or16 a3, l0
5335; GENERIC-NEXT:    cmplt16 a3, a0
5336; GENERIC-NEXT:    mvcv16 a0
5337; GENERIC-NEXT:    movi16 a3, 1
5338; GENERIC-NEXT:    subu16 a3, a0
5339; GENERIC-NEXT:    btsti16 a3, 0
5340; GENERIC-NEXT:    bt16 .LBB130_2
5341; GENERIC-NEXT:  # %bb.1: # %entry
5342; GENERIC-NEXT:    mov16 a2, a1
5343; GENERIC-NEXT:  .LBB130_2: # %entry
5344; GENERIC-NEXT:    mov16 a0, a2
5345; GENERIC-NEXT:    addi16 sp, sp, 4
5346; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5347; GENERIC-NEXT:    addi16 sp, sp, 4
5348; GENERIC-NEXT:    rts16
5349entry:
5350  %icmp = icmp sgt i16 %x, 47777777
5351  %ret = select i1 %icmp, i16 %m, i16 %n
5352  ret i16 %ret
5353}
5354
5355define i16 @selectC_sgt_i16(i1 %c, i16 %n, i16 %m) {
5356; CHECK-LABEL: selectC_sgt_i16:
5357; CHECK:       # %bb.0: # %entry
5358; CHECK-NEXT:    btsti32 a0, 0
5359; CHECK-NEXT:    movt32 a1, a2
5360; CHECK-NEXT:    mov16 a0, a1
5361; CHECK-NEXT:    rts16
5362;
5363; GENERIC-LABEL: selectC_sgt_i16:
5364; GENERIC:       # %bb.0: # %entry
5365; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5366; GENERIC-NEXT:    subi16 sp, sp, 4
5367; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5368; GENERIC-NEXT:    btsti16 a0, 0
5369; GENERIC-NEXT:    bt16 .LBB131_2
5370; GENERIC-NEXT:  # %bb.1: # %entry
5371; GENERIC-NEXT:    mov16 a2, a1
5372; GENERIC-NEXT:  .LBB131_2: # %entry
5373; GENERIC-NEXT:    mov16 a0, a2
5374; GENERIC-NEXT:    addi16 sp, sp, 4
5375; GENERIC-NEXT:    rts16
5376entry:
5377  %ret = select i1 %c, i16 %m, i16 %n
5378  ret i16 %ret
5379}
5380
5381
5382define i8 @selectRR_sgt_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
5383; CHECK-LABEL: selectRR_sgt_i8:
5384; CHECK:       # %bb.0: # %entry
5385; CHECK-NEXT:    sextb16 a1, a1
5386; CHECK-NEXT:    sextb16 a0, a0
5387; CHECK-NEXT:    cmplt16 a0, a1
5388; CHECK-NEXT:    movt32 a2, a3
5389; CHECK-NEXT:    mov16 a0, a2
5390; CHECK-NEXT:    rts16
5391;
5392; GENERIC-LABEL: selectRR_sgt_i8:
5393; GENERIC:       # %bb.0: # %entry
5394; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5395; GENERIC-NEXT:    subi16 sp, sp, 4
5396; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5397; GENERIC-NEXT:    sextb16 a1, a1
5398; GENERIC-NEXT:    sextb16 a0, a0
5399; GENERIC-NEXT:    cmplt16 a0, a1
5400; GENERIC-NEXT:    mvcv16 a0
5401; GENERIC-NEXT:    movi16 a1, 1
5402; GENERIC-NEXT:    subu16 a1, a0
5403; GENERIC-NEXT:    btsti16 a1, 0
5404; GENERIC-NEXT:    bt16 .LBB132_2
5405; GENERIC-NEXT:  # %bb.1: # %entry
5406; GENERIC-NEXT:    mov16 a3, a2
5407; GENERIC-NEXT:  .LBB132_2: # %entry
5408; GENERIC-NEXT:    mov16 a0, a3
5409; GENERIC-NEXT:    addi16 sp, sp, 4
5410; GENERIC-NEXT:    rts16
5411entry:
5412  %icmp = icmp sgt i8 %y, %x
5413  %ret = select i1 %icmp, i8 %m, i8 %n
5414  ret i8 %ret
5415}
5416
5417define i8 @selectRI_sgt_i8(i8 %x, i8 %n, i8 %m) {
5418; CHECK-LABEL: selectRI_sgt_i8:
5419; CHECK:       # %bb.0: # %entry
5420; CHECK-NEXT:    sextb16 a0, a0
5421; CHECK-NEXT:    movi16 a3, 10
5422; CHECK-NEXT:    cmplt16 a3, a0
5423; CHECK-NEXT:    movt32 a1, a2
5424; CHECK-NEXT:    mov16 a0, a1
5425; CHECK-NEXT:    rts16
5426;
5427; GENERIC-LABEL: selectRI_sgt_i8:
5428; GENERIC:       # %bb.0: # %entry
5429; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5430; GENERIC-NEXT:    subi16 sp, sp, 4
5431; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5432; GENERIC-NEXT:    sextb16 a0, a0
5433; GENERIC-NEXT:    movi16 a3, 10
5434; GENERIC-NEXT:    cmplt16 a3, a0
5435; GENERIC-NEXT:    mvcv16 a0
5436; GENERIC-NEXT:    movi16 a3, 1
5437; GENERIC-NEXT:    subu16 a3, a0
5438; GENERIC-NEXT:    btsti16 a3, 0
5439; GENERIC-NEXT:    bt16 .LBB133_2
5440; GENERIC-NEXT:  # %bb.1: # %entry
5441; GENERIC-NEXT:    mov16 a2, a1
5442; GENERIC-NEXT:  .LBB133_2: # %entry
5443; GENERIC-NEXT:    mov16 a0, a2
5444; GENERIC-NEXT:    addi16 sp, sp, 4
5445; GENERIC-NEXT:    rts16
5446entry:
5447  %icmp = icmp sgt i8 %x, 10
5448  %ret = select i1 %icmp, i8 %m, i8 %n
5449  ret i8 %ret
5450}
5451
5452define i8 @selectRX_sgt_i8(i8 %x, i8 %n, i8 %m) {
5453; CHECK-LABEL: selectRX_sgt_i8:
5454; CHECK:       # %bb.0: # %entry
5455; CHECK-NEXT:    sextb16 a0, a0
5456; CHECK-NEXT:    movih32 a3, 65535
5457; CHECK-NEXT:    ori32 a3, a3, 65521
5458; CHECK-NEXT:    cmplt16 a3, a0
5459; CHECK-NEXT:    movt32 a1, a2
5460; CHECK-NEXT:    mov16 a0, a1
5461; CHECK-NEXT:    rts16
5462;
5463; GENERIC-LABEL: selectRX_sgt_i8:
5464; GENERIC:       # %bb.0: # %entry
5465; GENERIC-NEXT:    subi16 sp, sp, 8
5466; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5467; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
5468; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5469; GENERIC-NEXT:    .cfi_offset l1, -4
5470; GENERIC-NEXT:    .cfi_offset l0, -8
5471; GENERIC-NEXT:    subi16 sp, sp, 4
5472; GENERIC-NEXT:    .cfi_def_cfa_offset 12
5473; GENERIC-NEXT:    sextb16 a0, a0
5474; GENERIC-NEXT:    movi16 a3, 255
5475; GENERIC-NEXT:    lsli16 l0, a3, 24
5476; GENERIC-NEXT:    lsli16 l1, a3, 16
5477; GENERIC-NEXT:    or16 l1, l0
5478; GENERIC-NEXT:    lsli16 a3, a3, 8
5479; GENERIC-NEXT:    or16 a3, l1
5480; GENERIC-NEXT:    movi16 l0, 241
5481; GENERIC-NEXT:    or16 l0, a3
5482; GENERIC-NEXT:    cmplt16 l0, a0
5483; GENERIC-NEXT:    mvcv16 a0
5484; GENERIC-NEXT:    movi16 a3, 1
5485; GENERIC-NEXT:    subu16 a3, a0
5486; GENERIC-NEXT:    btsti16 a3, 0
5487; GENERIC-NEXT:    bt16 .LBB134_2
5488; GENERIC-NEXT:  # %bb.1: # %entry
5489; GENERIC-NEXT:    mov16 a2, a1
5490; GENERIC-NEXT:  .LBB134_2: # %entry
5491; GENERIC-NEXT:    mov16 a0, a2
5492; GENERIC-NEXT:    addi16 sp, sp, 4
5493; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5494; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
5495; GENERIC-NEXT:    addi16 sp, sp, 8
5496; GENERIC-NEXT:    rts16
5497entry:
5498  %icmp = icmp sgt i8 %x, 47777777
5499  %ret = select i1 %icmp, i8 %m, i8 %n
5500  ret i8 %ret
5501}
5502
5503define i8 @selectC_sgt_i8(i1 %c, i8 %n, i8 %m) {
5504; CHECK-LABEL: selectC_sgt_i8:
5505; CHECK:       # %bb.0: # %entry
5506; CHECK-NEXT:    btsti32 a0, 0
5507; CHECK-NEXT:    movt32 a1, a2
5508; CHECK-NEXT:    mov16 a0, a1
5509; CHECK-NEXT:    rts16
5510;
5511; GENERIC-LABEL: selectC_sgt_i8:
5512; GENERIC:       # %bb.0: # %entry
5513; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5514; GENERIC-NEXT:    subi16 sp, sp, 4
5515; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5516; GENERIC-NEXT:    btsti16 a0, 0
5517; GENERIC-NEXT:    bt16 .LBB135_2
5518; GENERIC-NEXT:  # %bb.1: # %entry
5519; GENERIC-NEXT:    mov16 a2, a1
5520; GENERIC-NEXT:  .LBB135_2: # %entry
5521; GENERIC-NEXT:    mov16 a0, a2
5522; GENERIC-NEXT:    addi16 sp, sp, 4
5523; GENERIC-NEXT:    rts16
5524entry:
5525  %ret = select i1 %c, i8 %m, i8 %n
5526  ret i8 %ret
5527}
5528
5529
5530define i1 @selectRR_sgt_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
5531; CHECK-LABEL: selectRR_sgt_i1:
5532; CHECK:       # %bb.0: # %entry
5533; CHECK-NEXT:    btsti32 a1, 0
5534; CHECK-NEXT:    movt32 a3, a2
5535; CHECK-NEXT:    btsti32 a0, 0
5536; CHECK-NEXT:    movt32 a2, a3
5537; CHECK-NEXT:    mov16 a0, a2
5538; CHECK-NEXT:    rts16
5539;
5540; GENERIC-LABEL: selectRR_sgt_i1:
5541; GENERIC:       # %bb.0: # %entry
5542; GENERIC-NEXT:    subi16 sp, sp, 4
5543; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5544; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5545; GENERIC-NEXT:    .cfi_offset l0, -4
5546; GENERIC-NEXT:    subi16 sp, sp, 4
5547; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5548; GENERIC-NEXT:    mov16 l0, a0
5549; GENERIC-NEXT:    btsti16 a1, 0
5550; GENERIC-NEXT:    mov16 a0, a2
5551; GENERIC-NEXT:    bt16 .LBB136_2
5552; GENERIC-NEXT:  # %bb.1: # %entry
5553; GENERIC-NEXT:    mov16 a0, a3
5554; GENERIC-NEXT:  .LBB136_2: # %entry
5555; GENERIC-NEXT:    btsti16 l0, 0
5556; GENERIC-NEXT:    bt16 .LBB136_4
5557; GENERIC-NEXT:  # %bb.3: # %entry
5558; GENERIC-NEXT:    mov16 a0, a2
5559; GENERIC-NEXT:  .LBB136_4: # %entry
5560; GENERIC-NEXT:    addi16 sp, sp, 4
5561; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5562; GENERIC-NEXT:    addi16 sp, sp, 4
5563; GENERIC-NEXT:    rts16
5564entry:
5565  %icmp = icmp sgt i1 %y, %x
5566  %ret = select i1 %icmp, i1 %m, i1 %n
5567  ret i1 %ret
5568}
5569
5570define i1 @selectRI_sgt_i1(i1 %x, i1 %n, i1 %m) {
5571; CHECK-LABEL: selectRI_sgt_i1:
5572; CHECK:       # %bb.0: # %entry
5573; CHECK-NEXT:    mov16 a0, a1
5574; CHECK-NEXT:    rts16
5575;
5576; GENERIC-LABEL: selectRI_sgt_i1:
5577; GENERIC:       # %bb.0: # %entry
5578; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5579; GENERIC-NEXT:    subi16 sp, sp, 4
5580; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5581; GENERIC-NEXT:    mov16 a0, a1
5582; GENERIC-NEXT:    addi16 sp, sp, 4
5583; GENERIC-NEXT:    rts16
5584entry:
5585  %icmp = icmp sgt i1 %x, 10
5586  %ret = select i1 %icmp, i1 %m, i1 %n
5587  ret i1 %ret
5588}
5589
5590define i1 @selectRX_sgt_i1(i1 %x, i1 %n, i1 %m) {
5591; CHECK-LABEL: selectRX_sgt_i1:
5592; CHECK:       # %bb.0: # %entry
5593; CHECK-NEXT:    btsti32 a0, 0
5594; CHECK-NEXT:    movt32 a2, a1
5595; CHECK-NEXT:    mov16 a0, a2
5596; CHECK-NEXT:    rts16
5597;
5598; GENERIC-LABEL: selectRX_sgt_i1:
5599; GENERIC:       # %bb.0: # %entry
5600; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5601; GENERIC-NEXT:    subi16 sp, sp, 4
5602; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5603; GENERIC-NEXT:    btsti16 a0, 0
5604; GENERIC-NEXT:    bt16 .LBB138_2
5605; GENERIC-NEXT:  # %bb.1: # %entry
5606; GENERIC-NEXT:    mov16 a1, a2
5607; GENERIC-NEXT:  .LBB138_2: # %entry
5608; GENERIC-NEXT:    mov16 a0, a1
5609; GENERIC-NEXT:    addi16 sp, sp, 4
5610; GENERIC-NEXT:    rts16
5611entry:
5612  %icmp = icmp sgt i1 %x, 47777777
5613  %ret = select i1 %icmp, i1 %m, i1 %n
5614  ret i1 %ret
5615}
5616
5617define i1 @selectC_sgt_i1(i1 %c, i1 %n, i1 %m) {
5618; CHECK-LABEL: selectC_sgt_i1:
5619; CHECK:       # %bb.0: # %entry
5620; CHECK-NEXT:    btsti32 a0, 0
5621; CHECK-NEXT:    movt32 a1, a2
5622; CHECK-NEXT:    mov16 a0, a1
5623; CHECK-NEXT:    rts16
5624;
5625; GENERIC-LABEL: selectC_sgt_i1:
5626; GENERIC:       # %bb.0: # %entry
5627; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5628; GENERIC-NEXT:    subi16 sp, sp, 4
5629; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5630; GENERIC-NEXT:    btsti16 a0, 0
5631; GENERIC-NEXT:    bt16 .LBB139_2
5632; GENERIC-NEXT:  # %bb.1: # %entry
5633; GENERIC-NEXT:    mov16 a2, a1
5634; GENERIC-NEXT:  .LBB139_2: # %entry
5635; GENERIC-NEXT:    mov16 a0, a2
5636; GENERIC-NEXT:    addi16 sp, sp, 4
5637; GENERIC-NEXT:    rts16
5638entry:
5639  %ret = select i1 %c, i1 %m, i1 %n
5640  ret i1 %ret
5641}
5642
5643
5644define i32 @selectRR_sge_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
5645; CHECK-LABEL: selectRR_sge_i32:
5646; CHECK:       # %bb.0: # %entry
5647; CHECK-NEXT:    cmplt16 a1, a0
5648; CHECK-NEXT:    movf32 a2, a3
5649; CHECK-NEXT:    mov16 a0, a2
5650; CHECK-NEXT:    rts16
5651;
5652; GENERIC-LABEL: selectRR_sge_i32:
5653; GENERIC:       # %bb.0: # %entry
5654; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5655; GENERIC-NEXT:    subi16 sp, sp, 4
5656; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5657; GENERIC-NEXT:    cmplt16 a1, a0
5658; GENERIC-NEXT:    mvcv16 a0
5659; GENERIC-NEXT:    btsti16 a0, 0
5660; GENERIC-NEXT:    bt16 .LBB140_2
5661; GENERIC-NEXT:  # %bb.1: # %entry
5662; GENERIC-NEXT:    mov16 a3, a2
5663; GENERIC-NEXT:  .LBB140_2: # %entry
5664; GENERIC-NEXT:    mov16 a0, a3
5665; GENERIC-NEXT:    addi16 sp, sp, 4
5666; GENERIC-NEXT:    rts16
5667entry:
5668  %icmp = icmp sge i32 %y, %x
5669  %ret = select i1 %icmp, i32 %m, i32 %n
5670  ret i32 %ret
5671}
5672
5673define i32 @selectRI_sge_i32(i32 %x, i32 %n, i32 %m) {
5674; CHECK-LABEL: selectRI_sge_i32:
5675; CHECK:       # %bb.0: # %entry
5676; CHECK-NEXT:    movi16 a3, 9
5677; CHECK-NEXT:    cmplt16 a3, a0
5678; CHECK-NEXT:    movt32 a1, a2
5679; CHECK-NEXT:    mov16 a0, a1
5680; CHECK-NEXT:    rts16
5681;
5682; GENERIC-LABEL: selectRI_sge_i32:
5683; GENERIC:       # %bb.0: # %entry
5684; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5685; GENERIC-NEXT:    subi16 sp, sp, 4
5686; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5687; GENERIC-NEXT:    movi16 a3, 9
5688; GENERIC-NEXT:    cmplt16 a3, a0
5689; GENERIC-NEXT:    mvcv16 a0
5690; GENERIC-NEXT:    movi16 a3, 1
5691; GENERIC-NEXT:    subu16 a3, a0
5692; GENERIC-NEXT:    btsti16 a3, 0
5693; GENERIC-NEXT:    bt16 .LBB141_2
5694; GENERIC-NEXT:  # %bb.1: # %entry
5695; GENERIC-NEXT:    mov16 a2, a1
5696; GENERIC-NEXT:  .LBB141_2: # %entry
5697; GENERIC-NEXT:    mov16 a0, a2
5698; GENERIC-NEXT:    addi16 sp, sp, 4
5699; GENERIC-NEXT:    rts16
5700entry:
5701  %icmp = icmp sge i32 %x, 10
5702  %ret = select i1 %icmp, i32 %m, i32 %n
5703  ret i32 %ret
5704}
5705
5706define i32 @selectRX_sge_i32(i32 %x, i32 %n, i32 %m) {
5707; CHECK-LABEL: selectRX_sge_i32:
5708; CHECK:       # %bb.0: # %entry
5709; CHECK-NEXT:    movih32 a3, 729
5710; CHECK-NEXT:    ori32 a3, a3, 2032
5711; CHECK-NEXT:    cmplt16 a3, a0
5712; CHECK-NEXT:    movt32 a1, a2
5713; CHECK-NEXT:    mov16 a0, a1
5714; CHECK-NEXT:    rts16
5715;
5716; GENERIC-LABEL: selectRX_sge_i32:
5717; GENERIC:       # %bb.0: # %entry
5718; GENERIC-NEXT:    subi16 sp, sp, 4
5719; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5720; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5721; GENERIC-NEXT:    .cfi_offset l0, -4
5722; GENERIC-NEXT:    subi16 sp, sp, 4
5723; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5724; GENERIC-NEXT:    movi16 a3, 2
5725; GENERIC-NEXT:    lsli16 a3, a3, 24
5726; GENERIC-NEXT:    movi16 l0, 217
5727; GENERIC-NEXT:    lsli16 l0, l0, 16
5728; GENERIC-NEXT:    or16 l0, a3
5729; GENERIC-NEXT:    movi16 a3, 7
5730; GENERIC-NEXT:    lsli16 a3, a3, 8
5731; GENERIC-NEXT:    or16 a3, l0
5732; GENERIC-NEXT:    movi16 l0, 240
5733; GENERIC-NEXT:    or16 l0, a3
5734; GENERIC-NEXT:    cmplt16 l0, a0
5735; GENERIC-NEXT:    mvcv16 a0
5736; GENERIC-NEXT:    movi16 a3, 1
5737; GENERIC-NEXT:    subu16 a3, a0
5738; GENERIC-NEXT:    btsti16 a3, 0
5739; GENERIC-NEXT:    bt16 .LBB142_2
5740; GENERIC-NEXT:  # %bb.1: # %entry
5741; GENERIC-NEXT:    mov16 a2, a1
5742; GENERIC-NEXT:  .LBB142_2: # %entry
5743; GENERIC-NEXT:    mov16 a0, a2
5744; GENERIC-NEXT:    addi16 sp, sp, 4
5745; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5746; GENERIC-NEXT:    addi16 sp, sp, 4
5747; GENERIC-NEXT:    rts16
5748entry:
5749  %icmp = icmp sge i32 %x, 47777777
5750  %ret = select i1 %icmp, i32 %m, i32 %n
5751  ret i32 %ret
5752}
5753
5754define i32 @selectC_sge_i32(i1 %c, i32 %n, i32 %m) {
5755; CHECK-LABEL: selectC_sge_i32:
5756; CHECK:       # %bb.0: # %entry
5757; CHECK-NEXT:    btsti32 a0, 0
5758; CHECK-NEXT:    movt32 a1, a2
5759; CHECK-NEXT:    mov16 a0, a1
5760; CHECK-NEXT:    rts16
5761;
5762; GENERIC-LABEL: selectC_sge_i32:
5763; GENERIC:       # %bb.0: # %entry
5764; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5765; GENERIC-NEXT:    subi16 sp, sp, 4
5766; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5767; GENERIC-NEXT:    btsti16 a0, 0
5768; GENERIC-NEXT:    bt16 .LBB143_2
5769; GENERIC-NEXT:  # %bb.1: # %entry
5770; GENERIC-NEXT:    mov16 a2, a1
5771; GENERIC-NEXT:  .LBB143_2: # %entry
5772; GENERIC-NEXT:    mov16 a0, a2
5773; GENERIC-NEXT:    addi16 sp, sp, 4
5774; GENERIC-NEXT:    rts16
5775entry:
5776  %ret = select i1 %c, i32 %m, i32 %n
5777  ret i32 %ret
5778}
5779
5780define i64 @selectRR_sge_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
5781; CHECK-LABEL: selectRR_sge_i64:
5782; CHECK:       # %bb.0: # %entry
5783; CHECK-NEXT:    .cfi_def_cfa_offset 0
5784; CHECK-NEXT:    subi16 sp, sp, 12
5785; CHECK-NEXT:    .cfi_def_cfa_offset 12
5786; CHECK-NEXT:    cmphs16 a2, a0
5787; CHECK-NEXT:    mvc32 a0
5788; CHECK-NEXT:    st16.w a0, (sp, 4)
5789; CHECK-NEXT:    cmpne16 a3, a1
5790; CHECK-NEXT:    mvc32 a0
5791; CHECK-NEXT:    st16.w a0, (sp, 8)
5792; CHECK-NEXT:    cmplt16 a3, a1
5793; CHECK-NEXT:    mvcv16 a0
5794; CHECK-NEXT:    ld16.w a1, (sp, 4)
5795; CHECK-NEXT:    btsti32 a1, 0
5796; CHECK-NEXT:    mvc32 a1
5797; CHECK-NEXT:    ld16.w a2, (sp, 8)
5798; CHECK-NEXT:    btsti32 a2, 0
5799; CHECK-NEXT:    movf32 a0, a1
5800; CHECK-NEXT:    addi16 a1, sp, 12
5801; CHECK-NEXT:    addi16 a2, sp, 20
5802; CHECK-NEXT:    btsti32 a0, 0
5803; CHECK-NEXT:    movt32 a1, a2
5804; CHECK-NEXT:    ld16.w a0, (a1, 0)
5805; CHECK-NEXT:    ld16.w a1, (a1, 4)
5806; CHECK-NEXT:    addi16 sp, sp, 12
5807; CHECK-NEXT:    rts16
5808;
5809; GENERIC-LABEL: selectRR_sge_i64:
5810; GENERIC:       # %bb.0: # %entry
5811; GENERIC-NEXT:    .cfi_def_cfa_offset 0
5812; GENERIC-NEXT:    subi16 sp, sp, 4
5813; GENERIC-NEXT:    .cfi_def_cfa_offset 4
5814; GENERIC-NEXT:    cmphs16 a2, a0
5815; GENERIC-NEXT:    mvcv16 a2
5816; GENERIC-NEXT:    cmplt16 a3, a1
5817; GENERIC-NEXT:    mvcv16 a0
5818; GENERIC-NEXT:    cmpne16 a3, a1
5819; GENERIC-NEXT:    mvcv16 a1
5820; GENERIC-NEXT:    btsti16 a1, 0
5821; GENERIC-NEXT:    bf16 .LBB144_2
5822; GENERIC-NEXT:  # %bb.1:
5823; GENERIC-NEXT:    movi16 a0, 1
5824; GENERIC-NEXT:    subu16 a0, a2
5825; GENERIC-NEXT:  .LBB144_2: # %entry
5826; GENERIC-NEXT:    btsti16 a0, 0
5827; GENERIC-NEXT:    bt16 .LBB144_4
5828; GENERIC-NEXT:  # %bb.3: # %entry
5829; GENERIC-NEXT:    movi16 a0, 4
5830; GENERIC-NEXT:    br32 .LBB144_5
5831; GENERIC-NEXT:  .LBB144_4:
5832; GENERIC-NEXT:    movi16 a0, 12
5833; GENERIC-NEXT:  .LBB144_5: # %entry
5834; GENERIC-NEXT:    addu16 a0, sp
5835; GENERIC-NEXT:    mov16 a1, a0
5836; GENERIC-NEXT:    ld16.w a0, (a0, 0)
5837; GENERIC-NEXT:    ld16.w a1, (a1, 4)
5838; GENERIC-NEXT:    addi16 sp, sp, 4
5839; GENERIC-NEXT:    rts16
5840entry:
5841  %icmp = icmp sge i64 %y, %x
5842  %ret = select i1 %icmp, i64 %m, i64 %n
5843  ret i64 %ret
5844}
5845
5846define i64 @selectRI_sge_i64(i64 %x, i64 %n, i64 %m) {
5847; CHECK-LABEL: selectRI_sge_i64:
5848; CHECK:       # %bb.0: # %entry
5849; CHECK-NEXT:    subi16 sp, sp, 4
5850; CHECK-NEXT:    .cfi_def_cfa_offset 4
5851; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5852; CHECK-NEXT:    .cfi_offset l0, -4
5853; CHECK-NEXT:    subi16 sp, sp, 12
5854; CHECK-NEXT:    .cfi_def_cfa_offset 16
5855; CHECK-NEXT:    ld32.w t0, (sp, 20)
5856; CHECK-NEXT:    ld32.w t1, (sp, 16)
5857; CHECK-NEXT:    movi16 l0, 0
5858; CHECK-NEXT:    cmplt16 l0, a1
5859; CHECK-NEXT:    mvc32 l0
5860; CHECK-NEXT:    st16.w l0, (sp, 8)
5861; CHECK-NEXT:    movi16 l0, 9
5862; CHECK-NEXT:    cmphs16 l0, a0
5863; CHECK-NEXT:    mvcv16 a0
5864; CHECK-NEXT:    cmpnei16 a1, 0
5865; CHECK-NEXT:    mvc32 a1
5866; CHECK-NEXT:    st16.w a1, (sp, 4)
5867; CHECK-NEXT:    ld16.w a1, (sp, 8)
5868; CHECK-NEXT:    btsti32 a1, 0
5869; CHECK-NEXT:    mvc32 a1
5870; CHECK-NEXT:    ld16.w l0, (sp, 4)
5871; CHECK-NEXT:    btsti32 l0, 0
5872; CHECK-NEXT:    movf32 a1, a0
5873; CHECK-NEXT:    btsti32 a1, 0
5874; CHECK-NEXT:    movt32 a2, t1
5875; CHECK-NEXT:    movt32 a3, t0
5876; CHECK-NEXT:    mov16 a0, a2
5877; CHECK-NEXT:    mov16 a1, a3
5878; CHECK-NEXT:    addi16 sp, sp, 12
5879; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5880; CHECK-NEXT:    addi16 sp, sp, 4
5881; CHECK-NEXT:    rts16
5882;
5883; GENERIC-LABEL: selectRI_sge_i64:
5884; GENERIC:       # %bb.0: # %entry
5885; GENERIC-NEXT:    subi16 sp, sp, 8
5886; GENERIC-NEXT:    .cfi_def_cfa_offset 8
5887; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
5888; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5889; GENERIC-NEXT:    .cfi_offset l1, -4
5890; GENERIC-NEXT:    .cfi_offset l0, -8
5891; GENERIC-NEXT:    subi16 sp, sp, 4
5892; GENERIC-NEXT:    .cfi_def_cfa_offset 12
5893; GENERIC-NEXT:    movi16 l0, 0
5894; GENERIC-NEXT:    cmplt16 l0, a1
5895; GENERIC-NEXT:    mvcv16 l0
5896; GENERIC-NEXT:    movi16 l1, 9
5897; GENERIC-NEXT:    cmphs16 l1, a0
5898; GENERIC-NEXT:    mvcv16 a0
5899; GENERIC-NEXT:    cmpnei16 a1, 0
5900; GENERIC-NEXT:    mvcv16 a1
5901; GENERIC-NEXT:    btsti16 a1, 0
5902; GENERIC-NEXT:    bf16 .LBB145_5
5903; GENERIC-NEXT:  # %bb.1: # %entry
5904; GENERIC-NEXT:    btsti16 a0, 0
5905; GENERIC-NEXT:    bt16 .LBB145_6
5906; GENERIC-NEXT:  .LBB145_2: # %entry
5907; GENERIC-NEXT:    btsti16 a0, 0
5908; GENERIC-NEXT:    bf16 .LBB145_4
5909; GENERIC-NEXT:  .LBB145_3:
5910; GENERIC-NEXT:    ld16.w a3, (sp, 16)
5911; GENERIC-NEXT:  .LBB145_4: # %entry
5912; GENERIC-NEXT:    mov16 a0, a2
5913; GENERIC-NEXT:    mov16 a1, a3
5914; GENERIC-NEXT:    addi16 sp, sp, 4
5915; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5916; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
5917; GENERIC-NEXT:    addi16 sp, sp, 8
5918; GENERIC-NEXT:    rts16
5919; GENERIC-NEXT:  .LBB145_5: # %entry
5920; GENERIC-NEXT:    movi16 a0, 1
5921; GENERIC-NEXT:    subu16 a0, l0
5922; GENERIC-NEXT:    btsti16 a0, 0
5923; GENERIC-NEXT:    bf16 .LBB145_2
5924; GENERIC-NEXT:  .LBB145_6:
5925; GENERIC-NEXT:    ld16.w a2, (sp, 12)
5926; GENERIC-NEXT:    btsti16 a0, 0
5927; GENERIC-NEXT:    bt16 .LBB145_3
5928; GENERIC-NEXT:    br32 .LBB145_4
5929entry:
5930  %icmp = icmp sge i64 %x, 10
5931  %ret = select i1 %icmp, i64 %m, i64 %n
5932  ret i64 %ret
5933}
5934
5935define i64 @selectRX_sge_i64(i64 %x, i64 %n, i64 %m) {
5936; CHECK-LABEL: selectRX_sge_i64:
5937; CHECK:       # %bb.0: # %entry
5938; CHECK-NEXT:    subi16 sp, sp, 4
5939; CHECK-NEXT:    .cfi_def_cfa_offset 4
5940; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5941; CHECK-NEXT:    .cfi_offset l0, -4
5942; CHECK-NEXT:    subi16 sp, sp, 12
5943; CHECK-NEXT:    .cfi_def_cfa_offset 16
5944; CHECK-NEXT:    ld32.w t0, (sp, 20)
5945; CHECK-NEXT:    ld32.w t1, (sp, 16)
5946; CHECK-NEXT:    movi16 l0, 0
5947; CHECK-NEXT:    cmplt16 l0, a1
5948; CHECK-NEXT:    mvc32 l0
5949; CHECK-NEXT:    st16.w l0, (sp, 8)
5950; CHECK-NEXT:    movih32 l0, 729
5951; CHECK-NEXT:    ori32 l0, l0, 2032
5952; CHECK-NEXT:    cmphs16 l0, a0
5953; CHECK-NEXT:    mvcv16 a0
5954; CHECK-NEXT:    cmpnei16 a1, 0
5955; CHECK-NEXT:    mvc32 a1
5956; CHECK-NEXT:    st16.w a1, (sp, 4)
5957; CHECK-NEXT:    ld16.w a1, (sp, 8)
5958; CHECK-NEXT:    btsti32 a1, 0
5959; CHECK-NEXT:    mvc32 a1
5960; CHECK-NEXT:    ld16.w l0, (sp, 4)
5961; CHECK-NEXT:    btsti32 l0, 0
5962; CHECK-NEXT:    movf32 a1, a0
5963; CHECK-NEXT:    btsti32 a1, 0
5964; CHECK-NEXT:    movt32 a2, t1
5965; CHECK-NEXT:    movt32 a3, t0
5966; CHECK-NEXT:    mov16 a0, a2
5967; CHECK-NEXT:    mov16 a1, a3
5968; CHECK-NEXT:    addi16 sp, sp, 12
5969; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
5970; CHECK-NEXT:    addi16 sp, sp, 4
5971; CHECK-NEXT:    rts16
5972;
5973; GENERIC-LABEL: selectRX_sge_i64:
5974; GENERIC:       # %bb.0: # %entry
5975; GENERIC-NEXT:    subi16 sp, sp, 12
5976; GENERIC-NEXT:    .cfi_def_cfa_offset 12
5977; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
5978; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
5979; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
5980; GENERIC-NEXT:    .cfi_offset l2, -4
5981; GENERIC-NEXT:    .cfi_offset l1, -8
5982; GENERIC-NEXT:    .cfi_offset l0, -12
5983; GENERIC-NEXT:    subi16 sp, sp, 4
5984; GENERIC-NEXT:    .cfi_def_cfa_offset 16
5985; GENERIC-NEXT:    movi16 l0, 0
5986; GENERIC-NEXT:    cmplt16 l0, a1
5987; GENERIC-NEXT:    mvcv16 l0
5988; GENERIC-NEXT:    movi16 l1, 2
5989; GENERIC-NEXT:    lsli16 l1, l1, 24
5990; GENERIC-NEXT:    movi16 l2, 217
5991; GENERIC-NEXT:    lsli16 l2, l2, 16
5992; GENERIC-NEXT:    or16 l2, l1
5993; GENERIC-NEXT:    movi16 l1, 7
5994; GENERIC-NEXT:    lsli16 l1, l1, 8
5995; GENERIC-NEXT:    or16 l1, l2
5996; GENERIC-NEXT:    movi16 l2, 240
5997; GENERIC-NEXT:    or16 l2, l1
5998; GENERIC-NEXT:    cmphs16 l2, a0
5999; GENERIC-NEXT:    mvcv16 a0
6000; GENERIC-NEXT:    cmpnei16 a1, 0
6001; GENERIC-NEXT:    mvcv16 a1
6002; GENERIC-NEXT:    btsti16 a1, 0
6003; GENERIC-NEXT:    bf16 .LBB146_5
6004; GENERIC-NEXT:  # %bb.1: # %entry
6005; GENERIC-NEXT:    btsti16 a0, 0
6006; GENERIC-NEXT:    bt16 .LBB146_6
6007; GENERIC-NEXT:  .LBB146_2: # %entry
6008; GENERIC-NEXT:    btsti16 a0, 0
6009; GENERIC-NEXT:    bf16 .LBB146_4
6010; GENERIC-NEXT:  .LBB146_3:
6011; GENERIC-NEXT:    ld16.w a3, (sp, 20)
6012; GENERIC-NEXT:  .LBB146_4: # %entry
6013; GENERIC-NEXT:    mov16 a0, a2
6014; GENERIC-NEXT:    mov16 a1, a3
6015; GENERIC-NEXT:    addi16 sp, sp, 4
6016; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6017; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
6018; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
6019; GENERIC-NEXT:    addi16 sp, sp, 12
6020; GENERIC-NEXT:    rts16
6021; GENERIC-NEXT:  .LBB146_5: # %entry
6022; GENERIC-NEXT:    movi16 a0, 1
6023; GENERIC-NEXT:    subu16 a0, l0
6024; GENERIC-NEXT:    btsti16 a0, 0
6025; GENERIC-NEXT:    bf16 .LBB146_2
6026; GENERIC-NEXT:  .LBB146_6:
6027; GENERIC-NEXT:    ld16.w a2, (sp, 16)
6028; GENERIC-NEXT:    btsti16 a0, 0
6029; GENERIC-NEXT:    bt16 .LBB146_3
6030; GENERIC-NEXT:    br32 .LBB146_4
6031entry:
6032  %icmp = icmp sge i64 %x, 47777777
6033  %ret = select i1 %icmp, i64 %m, i64 %n
6034  ret i64 %ret
6035}
6036
6037define i64 @selectC_sge_i64(i1 %c, i64 %n, i64 %m) {
6038; CHECK-LABEL: selectC_sge_i64:
6039; CHECK:       # %bb.0: # %entry
6040; CHECK-NEXT:    ld32.w t0, (sp, 0)
6041; CHECK-NEXT:    btsti32 a0, 0
6042; CHECK-NEXT:    movt32 a1, a3
6043; CHECK-NEXT:    movt32 a2, t0
6044; CHECK-NEXT:    mov16 a0, a1
6045; CHECK-NEXT:    mov16 a1, a2
6046; CHECK-NEXT:    rts16
6047;
6048; GENERIC-LABEL: selectC_sge_i64:
6049; GENERIC:       # %bb.0: # %entry
6050; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6051; GENERIC-NEXT:    subi16 sp, sp, 4
6052; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6053; GENERIC-NEXT:    btsti16 a0, 0
6054; GENERIC-NEXT:    bt16 .LBB147_2
6055; GENERIC-NEXT:  # %bb.1: # %entry
6056; GENERIC-NEXT:    mov16 a3, a1
6057; GENERIC-NEXT:  .LBB147_2: # %entry
6058; GENERIC-NEXT:    btsti16 a0, 0
6059; GENERIC-NEXT:    bf16 .LBB147_4
6060; GENERIC-NEXT:  # %bb.3:
6061; GENERIC-NEXT:    ld16.w a2, (sp, 4)
6062; GENERIC-NEXT:  .LBB147_4: # %entry
6063; GENERIC-NEXT:    mov16 a0, a3
6064; GENERIC-NEXT:    mov16 a1, a2
6065; GENERIC-NEXT:    addi16 sp, sp, 4
6066; GENERIC-NEXT:    rts16
6067entry:
6068  %ret = select i1 %c, i64 %m, i64 %n
6069  ret i64 %ret
6070}
6071
6072
6073define i16 @selectRR_sge_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
6074; CHECK-LABEL: selectRR_sge_i16:
6075; CHECK:       # %bb.0: # %entry
6076; CHECK-NEXT:    sexth16 a0, a0
6077; CHECK-NEXT:    sexth16 a1, a1
6078; CHECK-NEXT:    cmplt16 a1, a0
6079; CHECK-NEXT:    movf32 a2, a3
6080; CHECK-NEXT:    mov16 a0, a2
6081; CHECK-NEXT:    rts16
6082;
6083; GENERIC-LABEL: selectRR_sge_i16:
6084; GENERIC:       # %bb.0: # %entry
6085; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6086; GENERIC-NEXT:    subi16 sp, sp, 4
6087; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6088; GENERIC-NEXT:    sexth16 a0, a0
6089; GENERIC-NEXT:    sexth16 a1, a1
6090; GENERIC-NEXT:    cmplt16 a1, a0
6091; GENERIC-NEXT:    mvcv16 a0
6092; GENERIC-NEXT:    btsti16 a0, 0
6093; GENERIC-NEXT:    bt16 .LBB148_2
6094; GENERIC-NEXT:  # %bb.1: # %entry
6095; GENERIC-NEXT:    mov16 a3, a2
6096; GENERIC-NEXT:  .LBB148_2: # %entry
6097; GENERIC-NEXT:    mov16 a0, a3
6098; GENERIC-NEXT:    addi16 sp, sp, 4
6099; GENERIC-NEXT:    rts16
6100entry:
6101  %icmp = icmp sge i16 %y, %x
6102  %ret = select i1 %icmp, i16 %m, i16 %n
6103  ret i16 %ret
6104}
6105
6106define i16 @selectRI_sge_i16(i16 %x, i16 %n, i16 %m) {
6107; CHECK-LABEL: selectRI_sge_i16:
6108; CHECK:       # %bb.0: # %entry
6109; CHECK-NEXT:    sexth16 a0, a0
6110; CHECK-NEXT:    movi16 a3, 9
6111; CHECK-NEXT:    cmplt16 a3, a0
6112; CHECK-NEXT:    movt32 a1, a2
6113; CHECK-NEXT:    mov16 a0, a1
6114; CHECK-NEXT:    rts16
6115;
6116; GENERIC-LABEL: selectRI_sge_i16:
6117; GENERIC:       # %bb.0: # %entry
6118; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6119; GENERIC-NEXT:    subi16 sp, sp, 4
6120; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6121; GENERIC-NEXT:    sexth16 a0, a0
6122; GENERIC-NEXT:    movi16 a3, 9
6123; GENERIC-NEXT:    cmplt16 a3, a0
6124; GENERIC-NEXT:    mvcv16 a0
6125; GENERIC-NEXT:    movi16 a3, 1
6126; GENERIC-NEXT:    subu16 a3, a0
6127; GENERIC-NEXT:    btsti16 a3, 0
6128; GENERIC-NEXT:    bt16 .LBB149_2
6129; GENERIC-NEXT:  # %bb.1: # %entry
6130; GENERIC-NEXT:    mov16 a2, a1
6131; GENERIC-NEXT:  .LBB149_2: # %entry
6132; GENERIC-NEXT:    mov16 a0, a2
6133; GENERIC-NEXT:    addi16 sp, sp, 4
6134; GENERIC-NEXT:    rts16
6135entry:
6136  %icmp = icmp sge i16 %x, 10
6137  %ret = select i1 %icmp, i16 %m, i16 %n
6138  ret i16 %ret
6139}
6140
6141define i16 @selectRX_sge_i16(i16 %x, i16 %n, i16 %m) {
6142; CHECK-LABEL: selectRX_sge_i16:
6143; CHECK:       # %bb.0: # %entry
6144; CHECK-NEXT:    sexth16 a0, a0
6145; CHECK-NEXT:    movi32 a3, 2032
6146; CHECK-NEXT:    cmplt16 a3, a0
6147; CHECK-NEXT:    movt32 a1, a2
6148; CHECK-NEXT:    mov16 a0, a1
6149; CHECK-NEXT:    rts16
6150;
6151; GENERIC-LABEL: selectRX_sge_i16:
6152; GENERIC:       # %bb.0: # %entry
6153; GENERIC-NEXT:    subi16 sp, sp, 4
6154; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6155; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6156; GENERIC-NEXT:    .cfi_offset l0, -4
6157; GENERIC-NEXT:    subi16 sp, sp, 4
6158; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6159; GENERIC-NEXT:    sexth16 a0, a0
6160; GENERIC-NEXT:    movi16 a3, 0
6161; GENERIC-NEXT:    lsli16 l0, a3, 24
6162; GENERIC-NEXT:    lsli16 a3, a3, 16
6163; GENERIC-NEXT:    or16 a3, l0
6164; GENERIC-NEXT:    movi16 l0, 7
6165; GENERIC-NEXT:    lsli16 l0, l0, 8
6166; GENERIC-NEXT:    or16 l0, a3
6167; GENERIC-NEXT:    movi16 a3, 240
6168; GENERIC-NEXT:    or16 a3, l0
6169; GENERIC-NEXT:    cmplt16 a3, a0
6170; GENERIC-NEXT:    mvcv16 a0
6171; GENERIC-NEXT:    movi16 a3, 1
6172; GENERIC-NEXT:    subu16 a3, a0
6173; GENERIC-NEXT:    btsti16 a3, 0
6174; GENERIC-NEXT:    bt16 .LBB150_2
6175; GENERIC-NEXT:  # %bb.1: # %entry
6176; GENERIC-NEXT:    mov16 a2, a1
6177; GENERIC-NEXT:  .LBB150_2: # %entry
6178; GENERIC-NEXT:    mov16 a0, a2
6179; GENERIC-NEXT:    addi16 sp, sp, 4
6180; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6181; GENERIC-NEXT:    addi16 sp, sp, 4
6182; GENERIC-NEXT:    rts16
6183entry:
6184  %icmp = icmp sge i16 %x, 47777777
6185  %ret = select i1 %icmp, i16 %m, i16 %n
6186  ret i16 %ret
6187}
6188
6189define i16 @selectC_sge_i16(i1 %c, i16 %n, i16 %m) {
6190; CHECK-LABEL: selectC_sge_i16:
6191; CHECK:       # %bb.0: # %entry
6192; CHECK-NEXT:    btsti32 a0, 0
6193; CHECK-NEXT:    movt32 a1, a2
6194; CHECK-NEXT:    mov16 a0, a1
6195; CHECK-NEXT:    rts16
6196;
6197; GENERIC-LABEL: selectC_sge_i16:
6198; GENERIC:       # %bb.0: # %entry
6199; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6200; GENERIC-NEXT:    subi16 sp, sp, 4
6201; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6202; GENERIC-NEXT:    btsti16 a0, 0
6203; GENERIC-NEXT:    bt16 .LBB151_2
6204; GENERIC-NEXT:  # %bb.1: # %entry
6205; GENERIC-NEXT:    mov16 a2, a1
6206; GENERIC-NEXT:  .LBB151_2: # %entry
6207; GENERIC-NEXT:    mov16 a0, a2
6208; GENERIC-NEXT:    addi16 sp, sp, 4
6209; GENERIC-NEXT:    rts16
6210entry:
6211  %ret = select i1 %c, i16 %m, i16 %n
6212  ret i16 %ret
6213}
6214
6215
6216define i8 @selectRR_sge_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
6217; CHECK-LABEL: selectRR_sge_i8:
6218; CHECK:       # %bb.0: # %entry
6219; CHECK-NEXT:    sextb16 a0, a0
6220; CHECK-NEXT:    sextb16 a1, a1
6221; CHECK-NEXT:    cmplt16 a1, a0
6222; CHECK-NEXT:    movf32 a2, a3
6223; CHECK-NEXT:    mov16 a0, a2
6224; CHECK-NEXT:    rts16
6225;
6226; GENERIC-LABEL: selectRR_sge_i8:
6227; GENERIC:       # %bb.0: # %entry
6228; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6229; GENERIC-NEXT:    subi16 sp, sp, 4
6230; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6231; GENERIC-NEXT:    sextb16 a0, a0
6232; GENERIC-NEXT:    sextb16 a1, a1
6233; GENERIC-NEXT:    cmplt16 a1, a0
6234; GENERIC-NEXT:    mvcv16 a0
6235; GENERIC-NEXT:    btsti16 a0, 0
6236; GENERIC-NEXT:    bt16 .LBB152_2
6237; GENERIC-NEXT:  # %bb.1: # %entry
6238; GENERIC-NEXT:    mov16 a3, a2
6239; GENERIC-NEXT:  .LBB152_2: # %entry
6240; GENERIC-NEXT:    mov16 a0, a3
6241; GENERIC-NEXT:    addi16 sp, sp, 4
6242; GENERIC-NEXT:    rts16
6243entry:
6244  %icmp = icmp sge i8 %y, %x
6245  %ret = select i1 %icmp, i8 %m, i8 %n
6246  ret i8 %ret
6247}
6248
6249define i8 @selectRI_sge_i8(i8 %x, i8 %n, i8 %m) {
6250; CHECK-LABEL: selectRI_sge_i8:
6251; CHECK:       # %bb.0: # %entry
6252; CHECK-NEXT:    sextb16 a0, a0
6253; CHECK-NEXT:    movi16 a3, 9
6254; CHECK-NEXT:    cmplt16 a3, a0
6255; CHECK-NEXT:    movt32 a1, a2
6256; CHECK-NEXT:    mov16 a0, a1
6257; CHECK-NEXT:    rts16
6258;
6259; GENERIC-LABEL: selectRI_sge_i8:
6260; GENERIC:       # %bb.0: # %entry
6261; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6262; GENERIC-NEXT:    subi16 sp, sp, 4
6263; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6264; GENERIC-NEXT:    sextb16 a0, a0
6265; GENERIC-NEXT:    movi16 a3, 9
6266; GENERIC-NEXT:    cmplt16 a3, a0
6267; GENERIC-NEXT:    mvcv16 a0
6268; GENERIC-NEXT:    movi16 a3, 1
6269; GENERIC-NEXT:    subu16 a3, a0
6270; GENERIC-NEXT:    btsti16 a3, 0
6271; GENERIC-NEXT:    bt16 .LBB153_2
6272; GENERIC-NEXT:  # %bb.1: # %entry
6273; GENERIC-NEXT:    mov16 a2, a1
6274; GENERIC-NEXT:  .LBB153_2: # %entry
6275; GENERIC-NEXT:    mov16 a0, a2
6276; GENERIC-NEXT:    addi16 sp, sp, 4
6277; GENERIC-NEXT:    rts16
6278entry:
6279  %icmp = icmp sge i8 %x, 10
6280  %ret = select i1 %icmp, i8 %m, i8 %n
6281  ret i8 %ret
6282}
6283
6284define i8 @selectRX_sge_i8(i8 %x, i8 %n, i8 %m) {
6285; CHECK-LABEL: selectRX_sge_i8:
6286; CHECK:       # %bb.0: # %entry
6287; CHECK-NEXT:    sextb16 a0, a0
6288; CHECK-NEXT:    movih32 a3, 65535
6289; CHECK-NEXT:    ori32 a3, a3, 65520
6290; CHECK-NEXT:    cmplt16 a3, a0
6291; CHECK-NEXT:    movt32 a1, a2
6292; CHECK-NEXT:    mov16 a0, a1
6293; CHECK-NEXT:    rts16
6294;
6295; GENERIC-LABEL: selectRX_sge_i8:
6296; GENERIC:       # %bb.0: # %entry
6297; GENERIC-NEXT:    subi16 sp, sp, 8
6298; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6299; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
6300; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6301; GENERIC-NEXT:    .cfi_offset l1, -4
6302; GENERIC-NEXT:    .cfi_offset l0, -8
6303; GENERIC-NEXT:    subi16 sp, sp, 4
6304; GENERIC-NEXT:    .cfi_def_cfa_offset 12
6305; GENERIC-NEXT:    sextb16 a0, a0
6306; GENERIC-NEXT:    movi16 a3, 255
6307; GENERIC-NEXT:    lsli16 l0, a3, 24
6308; GENERIC-NEXT:    lsli16 l1, a3, 16
6309; GENERIC-NEXT:    or16 l1, l0
6310; GENERIC-NEXT:    lsli16 a3, a3, 8
6311; GENERIC-NEXT:    or16 a3, l1
6312; GENERIC-NEXT:    movi16 l0, 240
6313; GENERIC-NEXT:    or16 l0, a3
6314; GENERIC-NEXT:    cmplt16 l0, a0
6315; GENERIC-NEXT:    mvcv16 a0
6316; GENERIC-NEXT:    movi16 a3, 1
6317; GENERIC-NEXT:    subu16 a3, a0
6318; GENERIC-NEXT:    btsti16 a3, 0
6319; GENERIC-NEXT:    bt16 .LBB154_2
6320; GENERIC-NEXT:  # %bb.1: # %entry
6321; GENERIC-NEXT:    mov16 a2, a1
6322; GENERIC-NEXT:  .LBB154_2: # %entry
6323; GENERIC-NEXT:    mov16 a0, a2
6324; GENERIC-NEXT:    addi16 sp, sp, 4
6325; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6326; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
6327; GENERIC-NEXT:    addi16 sp, sp, 8
6328; GENERIC-NEXT:    rts16
6329entry:
6330  %icmp = icmp sge i8 %x, 47777777
6331  %ret = select i1 %icmp, i8 %m, i8 %n
6332  ret i8 %ret
6333}
6334
6335define i8 @selectC_sge_i8(i1 %c, i8 %n, i8 %m) {
6336; CHECK-LABEL: selectC_sge_i8:
6337; CHECK:       # %bb.0: # %entry
6338; CHECK-NEXT:    btsti32 a0, 0
6339; CHECK-NEXT:    movt32 a1, a2
6340; CHECK-NEXT:    mov16 a0, a1
6341; CHECK-NEXT:    rts16
6342;
6343; GENERIC-LABEL: selectC_sge_i8:
6344; GENERIC:       # %bb.0: # %entry
6345; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6346; GENERIC-NEXT:    subi16 sp, sp, 4
6347; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6348; GENERIC-NEXT:    btsti16 a0, 0
6349; GENERIC-NEXT:    bt16 .LBB155_2
6350; GENERIC-NEXT:  # %bb.1: # %entry
6351; GENERIC-NEXT:    mov16 a2, a1
6352; GENERIC-NEXT:  .LBB155_2: # %entry
6353; GENERIC-NEXT:    mov16 a0, a2
6354; GENERIC-NEXT:    addi16 sp, sp, 4
6355; GENERIC-NEXT:    rts16
6356entry:
6357  %ret = select i1 %c, i8 %m, i8 %n
6358  ret i8 %ret
6359}
6360
6361
6362define i1 @selectRR_sge_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
6363; CHECK-LABEL: selectRR_sge_i1:
6364; CHECK:       # %bb.0: # %entry
6365; CHECK-NEXT:    btsti32 a1, 0
6366; CHECK-NEXT:    mov16 a1, a3
6367; CHECK-NEXT:    movt32 a1, a2
6368; CHECK-NEXT:    btsti32 a0, 0
6369; CHECK-NEXT:    movt32 a1, a3
6370; CHECK-NEXT:    mov16 a0, a1
6371; CHECK-NEXT:    rts16
6372;
6373; GENERIC-LABEL: selectRR_sge_i1:
6374; GENERIC:       # %bb.0: # %entry
6375; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6376; GENERIC-NEXT:    subi16 sp, sp, 4
6377; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6378; GENERIC-NEXT:    btsti16 a1, 0
6379; GENERIC-NEXT:    bt16 .LBB156_2
6380; GENERIC-NEXT:  # %bb.1: # %entry
6381; GENERIC-NEXT:    mov16 a2, a3
6382; GENERIC-NEXT:  .LBB156_2: # %entry
6383; GENERIC-NEXT:    btsti16 a0, 0
6384; GENERIC-NEXT:    bt16 .LBB156_4
6385; GENERIC-NEXT:  # %bb.3: # %entry
6386; GENERIC-NEXT:    mov16 a3, a2
6387; GENERIC-NEXT:  .LBB156_4: # %entry
6388; GENERIC-NEXT:    mov16 a0, a3
6389; GENERIC-NEXT:    addi16 sp, sp, 4
6390; GENERIC-NEXT:    rts16
6391entry:
6392  %icmp = icmp sge i1 %y, %x
6393  %ret = select i1 %icmp, i1 %m, i1 %n
6394  ret i1 %ret
6395}
6396
6397define i1 @selectRI_sge_i1(i1 %x, i1 %n, i1 %m) {
6398; CHECK-LABEL: selectRI_sge_i1:
6399; CHECK:       # %bb.0: # %entry
6400; CHECK-NEXT:    btsti32 a0, 0
6401; CHECK-NEXT:    movt32 a2, a1
6402; CHECK-NEXT:    mov16 a0, a2
6403; CHECK-NEXT:    rts16
6404;
6405; GENERIC-LABEL: selectRI_sge_i1:
6406; GENERIC:       # %bb.0: # %entry
6407; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6408; GENERIC-NEXT:    subi16 sp, sp, 4
6409; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6410; GENERIC-NEXT:    btsti16 a0, 0
6411; GENERIC-NEXT:    bt16 .LBB157_2
6412; GENERIC-NEXT:  # %bb.1: # %entry
6413; GENERIC-NEXT:    mov16 a1, a2
6414; GENERIC-NEXT:  .LBB157_2: # %entry
6415; GENERIC-NEXT:    mov16 a0, a1
6416; GENERIC-NEXT:    addi16 sp, sp, 4
6417; GENERIC-NEXT:    rts16
6418entry:
6419  %icmp = icmp sge i1 %x, 10
6420  %ret = select i1 %icmp, i1 %m, i1 %n
6421  ret i1 %ret
6422}
6423
6424define i1 @selectRX_sge_i1(i1 %x, i1 %n, i1 %m) {
6425; CHECK-LABEL: selectRX_sge_i1:
6426; CHECK:       # %bb.0: # %entry
6427; CHECK-NEXT:    mov16 a0, a2
6428; CHECK-NEXT:    rts16
6429;
6430; GENERIC-LABEL: selectRX_sge_i1:
6431; GENERIC:       # %bb.0: # %entry
6432; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6433; GENERIC-NEXT:    subi16 sp, sp, 4
6434; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6435; GENERIC-NEXT:    mov16 a0, a2
6436; GENERIC-NEXT:    addi16 sp, sp, 4
6437; GENERIC-NEXT:    rts16
6438entry:
6439  %icmp = icmp sge i1 %x, 47777777
6440  %ret = select i1 %icmp, i1 %m, i1 %n
6441  ret i1 %ret
6442}
6443
6444define i1 @selectC_sge_i1(i1 %c, i1 %n, i1 %m) {
6445; CHECK-LABEL: selectC_sge_i1:
6446; CHECK:       # %bb.0: # %entry
6447; CHECK-NEXT:    btsti32 a0, 0
6448; CHECK-NEXT:    movt32 a1, a2
6449; CHECK-NEXT:    mov16 a0, a1
6450; CHECK-NEXT:    rts16
6451;
6452; GENERIC-LABEL: selectC_sge_i1:
6453; GENERIC:       # %bb.0: # %entry
6454; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6455; GENERIC-NEXT:    subi16 sp, sp, 4
6456; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6457; GENERIC-NEXT:    btsti16 a0, 0
6458; GENERIC-NEXT:    bt16 .LBB159_2
6459; GENERIC-NEXT:  # %bb.1: # %entry
6460; GENERIC-NEXT:    mov16 a2, a1
6461; GENERIC-NEXT:  .LBB159_2: # %entry
6462; GENERIC-NEXT:    mov16 a0, a2
6463; GENERIC-NEXT:    addi16 sp, sp, 4
6464; GENERIC-NEXT:    rts16
6465entry:
6466  %ret = select i1 %c, i1 %m, i1 %n
6467  ret i1 %ret
6468}
6469
6470
6471define i32 @selectRR_slt_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
6472; CHECK-LABEL: selectRR_slt_i32:
6473; CHECK:       # %bb.0: # %entry
6474; CHECK-NEXT:    cmplt16 a1, a0
6475; CHECK-NEXT:    movt32 a2, a3
6476; CHECK-NEXT:    mov16 a0, a2
6477; CHECK-NEXT:    rts16
6478;
6479; GENERIC-LABEL: selectRR_slt_i32:
6480; GENERIC:       # %bb.0: # %entry
6481; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6482; GENERIC-NEXT:    subi16 sp, sp, 4
6483; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6484; GENERIC-NEXT:    cmplt16 a1, a0
6485; GENERIC-NEXT:    mvcv16 a0
6486; GENERIC-NEXT:    movi16 a1, 1
6487; GENERIC-NEXT:    subu16 a1, a0
6488; GENERIC-NEXT:    btsti16 a1, 0
6489; GENERIC-NEXT:    bt16 .LBB160_2
6490; GENERIC-NEXT:  # %bb.1: # %entry
6491; GENERIC-NEXT:    mov16 a3, a2
6492; GENERIC-NEXT:  .LBB160_2: # %entry
6493; GENERIC-NEXT:    mov16 a0, a3
6494; GENERIC-NEXT:    addi16 sp, sp, 4
6495; GENERIC-NEXT:    rts16
6496entry:
6497  %icmp = icmp slt i32 %y, %x
6498  %ret = select i1 %icmp, i32 %m, i32 %n
6499  ret i32 %ret
6500}
6501
6502define i32 @selectRI_slt_i32(i32 %x, i32 %n, i32 %m) {
6503; CHECK-LABEL: selectRI_slt_i32:
6504; CHECK:       # %bb.0: # %entry
6505; CHECK-NEXT:    cmplti16 a0, 10
6506; CHECK-NEXT:    movt32 a1, a2
6507; CHECK-NEXT:    mov16 a0, a1
6508; CHECK-NEXT:    rts16
6509;
6510; GENERIC-LABEL: selectRI_slt_i32:
6511; GENERIC:       # %bb.0: # %entry
6512; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6513; GENERIC-NEXT:    subi16 sp, sp, 4
6514; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6515; GENERIC-NEXT:    cmplti16 a0, 10
6516; GENERIC-NEXT:    mvcv16 a0
6517; GENERIC-NEXT:    movi16 a3, 1
6518; GENERIC-NEXT:    subu16 a3, a0
6519; GENERIC-NEXT:    btsti16 a3, 0
6520; GENERIC-NEXT:    bt16 .LBB161_2
6521; GENERIC-NEXT:  # %bb.1: # %entry
6522; GENERIC-NEXT:    mov16 a2, a1
6523; GENERIC-NEXT:  .LBB161_2: # %entry
6524; GENERIC-NEXT:    mov16 a0, a2
6525; GENERIC-NEXT:    addi16 sp, sp, 4
6526; GENERIC-NEXT:    rts16
6527entry:
6528  %icmp = icmp slt i32 %x, 10
6529  %ret = select i1 %icmp, i32 %m, i32 %n
6530  ret i32 %ret
6531}
6532
6533define i32 @selectRX_slt_i32(i32 %x, i32 %n, i32 %m) {
6534; CHECK-LABEL: selectRX_slt_i32:
6535; CHECK:       # %bb.0: # %entry
6536; CHECK-NEXT:    movih32 a3, 729
6537; CHECK-NEXT:    ori32 a3, a3, 2033
6538; CHECK-NEXT:    cmplt16 a0, a3
6539; CHECK-NEXT:    movt32 a1, a2
6540; CHECK-NEXT:    mov16 a0, a1
6541; CHECK-NEXT:    rts16
6542;
6543; GENERIC-LABEL: selectRX_slt_i32:
6544; GENERIC:       # %bb.0: # %entry
6545; GENERIC-NEXT:    subi16 sp, sp, 4
6546; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6547; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6548; GENERIC-NEXT:    .cfi_offset l0, -4
6549; GENERIC-NEXT:    subi16 sp, sp, 4
6550; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6551; GENERIC-NEXT:    movi16 a3, 2
6552; GENERIC-NEXT:    lsli16 a3, a3, 24
6553; GENERIC-NEXT:    movi16 l0, 217
6554; GENERIC-NEXT:    lsli16 l0, l0, 16
6555; GENERIC-NEXT:    or16 l0, a3
6556; GENERIC-NEXT:    movi16 a3, 7
6557; GENERIC-NEXT:    lsli16 a3, a3, 8
6558; GENERIC-NEXT:    or16 a3, l0
6559; GENERIC-NEXT:    movi16 l0, 241
6560; GENERIC-NEXT:    or16 l0, a3
6561; GENERIC-NEXT:    cmplt16 a0, l0
6562; GENERIC-NEXT:    mvcv16 a0
6563; GENERIC-NEXT:    movi16 a3, 1
6564; GENERIC-NEXT:    subu16 a3, a0
6565; GENERIC-NEXT:    btsti16 a3, 0
6566; GENERIC-NEXT:    bt16 .LBB162_2
6567; GENERIC-NEXT:  # %bb.1: # %entry
6568; GENERIC-NEXT:    mov16 a2, a1
6569; GENERIC-NEXT:  .LBB162_2: # %entry
6570; GENERIC-NEXT:    mov16 a0, a2
6571; GENERIC-NEXT:    addi16 sp, sp, 4
6572; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6573; GENERIC-NEXT:    addi16 sp, sp, 4
6574; GENERIC-NEXT:    rts16
6575entry:
6576  %icmp = icmp slt i32 %x, 47777777
6577  %ret = select i1 %icmp, i32 %m, i32 %n
6578  ret i32 %ret
6579}
6580
6581define i32 @selectC_slt_i32(i1 %c, i32 %n, i32 %m) {
6582; CHECK-LABEL: selectC_slt_i32:
6583; CHECK:       # %bb.0: # %entry
6584; CHECK-NEXT:    btsti32 a0, 0
6585; CHECK-NEXT:    movt32 a1, a2
6586; CHECK-NEXT:    mov16 a0, a1
6587; CHECK-NEXT:    rts16
6588;
6589; GENERIC-LABEL: selectC_slt_i32:
6590; GENERIC:       # %bb.0: # %entry
6591; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6592; GENERIC-NEXT:    subi16 sp, sp, 4
6593; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6594; GENERIC-NEXT:    btsti16 a0, 0
6595; GENERIC-NEXT:    bt16 .LBB163_2
6596; GENERIC-NEXT:  # %bb.1: # %entry
6597; GENERIC-NEXT:    mov16 a2, a1
6598; GENERIC-NEXT:  .LBB163_2: # %entry
6599; GENERIC-NEXT:    mov16 a0, a2
6600; GENERIC-NEXT:    addi16 sp, sp, 4
6601; GENERIC-NEXT:    rts16
6602entry:
6603  %ret = select i1 %c, i32 %m, i32 %n
6604  ret i32 %ret
6605}
6606
6607define i64 @selectRR_slt_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
6608; CHECK-LABEL: selectRR_slt_i64:
6609; CHECK:       # %bb.0: # %entry
6610; CHECK-NEXT:    .cfi_def_cfa_offset 0
6611; CHECK-NEXT:    subi16 sp, sp, 12
6612; CHECK-NEXT:    .cfi_def_cfa_offset 12
6613; CHECK-NEXT:    cmplt16 a3, a1
6614; CHECK-NEXT:    mvc32 t0
6615; CHECK-NEXT:    st32.w t0, (sp, 4)
6616; CHECK-NEXT:    cmpne16 a3, a1
6617; CHECK-NEXT:    mvc32 a1
6618; CHECK-NEXT:    st16.w a1, (sp, 8)
6619; CHECK-NEXT:    cmphs16 a2, a0
6620; CHECK-NEXT:    mvcv16 a0
6621; CHECK-NEXT:    ld16.w a1, (sp, 4)
6622; CHECK-NEXT:    btsti32 a1, 0
6623; CHECK-NEXT:    mvc32 a1
6624; CHECK-NEXT:    ld16.w a2, (sp, 8)
6625; CHECK-NEXT:    btsti32 a2, 0
6626; CHECK-NEXT:    movf32 a1, a0
6627; CHECK-NEXT:    addi16 a2, sp, 12
6628; CHECK-NEXT:    addi16 a0, sp, 20
6629; CHECK-NEXT:    btsti32 a1, 0
6630; CHECK-NEXT:    movt32 a2, a0
6631; CHECK-NEXT:    ld16.w a0, (a2, 0)
6632; CHECK-NEXT:    ld16.w a1, (a2, 4)
6633; CHECK-NEXT:    addi16 sp, sp, 12
6634; CHECK-NEXT:    rts16
6635;
6636; GENERIC-LABEL: selectRR_slt_i64:
6637; GENERIC:       # %bb.0: # %entry
6638; GENERIC-NEXT:    subi16 sp, sp, 4
6639; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6640; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6641; GENERIC-NEXT:    .cfi_offset l0, -4
6642; GENERIC-NEXT:    subi16 sp, sp, 4
6643; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6644; GENERIC-NEXT:    cmplt16 a3, a1
6645; GENERIC-NEXT:    mvcv16 l0
6646; GENERIC-NEXT:    cmphs16 a2, a0
6647; GENERIC-NEXT:    mvcv16 a0
6648; GENERIC-NEXT:    cmpne16 a3, a1
6649; GENERIC-NEXT:    mvcv16 a1
6650; GENERIC-NEXT:    btsti16 a1, 0
6651; GENERIC-NEXT:    bt16 .LBB164_2
6652; GENERIC-NEXT:  # %bb.1: # %entry
6653; GENERIC-NEXT:    movi16 a0, 1
6654; GENERIC-NEXT:    subu16 a0, l0
6655; GENERIC-NEXT:  .LBB164_2: # %entry
6656; GENERIC-NEXT:    btsti16 a0, 0
6657; GENERIC-NEXT:    bt16 .LBB164_4
6658; GENERIC-NEXT:  # %bb.3: # %entry
6659; GENERIC-NEXT:    movi16 a0, 8
6660; GENERIC-NEXT:    br32 .LBB164_5
6661; GENERIC-NEXT:  .LBB164_4:
6662; GENERIC-NEXT:    movi16 a0, 16
6663; GENERIC-NEXT:  .LBB164_5: # %entry
6664; GENERIC-NEXT:    addu16 a0, sp
6665; GENERIC-NEXT:    mov16 a1, a0
6666; GENERIC-NEXT:    ld16.w a0, (a0, 0)
6667; GENERIC-NEXT:    ld16.w a1, (a1, 4)
6668; GENERIC-NEXT:    addi16 sp, sp, 4
6669; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6670; GENERIC-NEXT:    addi16 sp, sp, 4
6671; GENERIC-NEXT:    rts16
6672entry:
6673  %icmp = icmp slt i64 %y, %x
6674  %ret = select i1 %icmp, i64 %m, i64 %n
6675  ret i64 %ret
6676}
6677
6678define i64 @selectRI_slt_i64(i64 %x, i64 %n, i64 %m) {
6679; CHECK-LABEL: selectRI_slt_i64:
6680; CHECK:       # %bb.0: # %entry
6681; CHECK-NEXT:    subi16 sp, sp, 4
6682; CHECK-NEXT:    .cfi_def_cfa_offset 4
6683; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6684; CHECK-NEXT:    .cfi_offset l0, -4
6685; CHECK-NEXT:    subi16 sp, sp, 12
6686; CHECK-NEXT:    .cfi_def_cfa_offset 16
6687; CHECK-NEXT:    ld32.w t0, (sp, 20)
6688; CHECK-NEXT:    ld32.w t1, (sp, 16)
6689; CHECK-NEXT:    movi16 l0, 0
6690; CHECK-NEXT:    cmplt16 a1, l0
6691; CHECK-NEXT:    mvc32 l0
6692; CHECK-NEXT:    st16.w l0, (sp, 4)
6693; CHECK-NEXT:    cmpnei16 a1, 0
6694; CHECK-NEXT:    mvc32 a1
6695; CHECK-NEXT:    st16.w a1, (sp, 8)
6696; CHECK-NEXT:    cmphsi16 a0, 10
6697; CHECK-NEXT:    mvcv16 a0
6698; CHECK-NEXT:    ld16.w a1, (sp, 4)
6699; CHECK-NEXT:    btsti32 a1, 0
6700; CHECK-NEXT:    mvc32 a1
6701; CHECK-NEXT:    ld16.w l0, (sp, 8)
6702; CHECK-NEXT:    btsti32 l0, 0
6703; CHECK-NEXT:    movf32 a1, a0
6704; CHECK-NEXT:    btsti32 a1, 0
6705; CHECK-NEXT:    movt32 a2, t1
6706; CHECK-NEXT:    movt32 a3, t0
6707; CHECK-NEXT:    mov16 a0, a2
6708; CHECK-NEXT:    mov16 a1, a3
6709; CHECK-NEXT:    addi16 sp, sp, 12
6710; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6711; CHECK-NEXT:    addi16 sp, sp, 4
6712; CHECK-NEXT:    rts16
6713;
6714; GENERIC-LABEL: selectRI_slt_i64:
6715; GENERIC:       # %bb.0: # %entry
6716; GENERIC-NEXT:    subi16 sp, sp, 4
6717; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6718; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6719; GENERIC-NEXT:    .cfi_offset l0, -4
6720; GENERIC-NEXT:    subi16 sp, sp, 4
6721; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6722; GENERIC-NEXT:    movi16 l0, 0
6723; GENERIC-NEXT:    cmplt16 a1, l0
6724; GENERIC-NEXT:    mvcv16 l0
6725; GENERIC-NEXT:    cmphsi16 a0, 10
6726; GENERIC-NEXT:    mvcv16 a0
6727; GENERIC-NEXT:    cmpnei16 a1, 0
6728; GENERIC-NEXT:    mvcv16 a1
6729; GENERIC-NEXT:    btsti16 a1, 0
6730; GENERIC-NEXT:    bf16 .LBB165_5
6731; GENERIC-NEXT:  # %bb.1: # %entry
6732; GENERIC-NEXT:    btsti16 a0, 0
6733; GENERIC-NEXT:    bt16 .LBB165_6
6734; GENERIC-NEXT:  .LBB165_2: # %entry
6735; GENERIC-NEXT:    btsti16 a0, 0
6736; GENERIC-NEXT:    bf16 .LBB165_4
6737; GENERIC-NEXT:  .LBB165_3:
6738; GENERIC-NEXT:    ld16.w a3, (sp, 12)
6739; GENERIC-NEXT:  .LBB165_4: # %entry
6740; GENERIC-NEXT:    mov16 a0, a2
6741; GENERIC-NEXT:    mov16 a1, a3
6742; GENERIC-NEXT:    addi16 sp, sp, 4
6743; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6744; GENERIC-NEXT:    addi16 sp, sp, 4
6745; GENERIC-NEXT:    rts16
6746; GENERIC-NEXT:  .LBB165_5: # %entry
6747; GENERIC-NEXT:    movi16 a0, 1
6748; GENERIC-NEXT:    subu16 a0, l0
6749; GENERIC-NEXT:    btsti16 a0, 0
6750; GENERIC-NEXT:    bf16 .LBB165_2
6751; GENERIC-NEXT:  .LBB165_6:
6752; GENERIC-NEXT:    ld16.w a2, (sp, 8)
6753; GENERIC-NEXT:    btsti16 a0, 0
6754; GENERIC-NEXT:    bt16 .LBB165_3
6755; GENERIC-NEXT:    br32 .LBB165_4
6756entry:
6757  %icmp = icmp slt i64 %x, 10
6758  %ret = select i1 %icmp, i64 %m, i64 %n
6759  ret i64 %ret
6760}
6761
6762define i64 @selectRX_slt_i64(i64 %x, i64 %n, i64 %m) {
6763; CHECK-LABEL: selectRX_slt_i64:
6764; CHECK:       # %bb.0: # %entry
6765; CHECK-NEXT:    subi16 sp, sp, 4
6766; CHECK-NEXT:    .cfi_def_cfa_offset 4
6767; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6768; CHECK-NEXT:    .cfi_offset l0, -4
6769; CHECK-NEXT:    subi16 sp, sp, 12
6770; CHECK-NEXT:    .cfi_def_cfa_offset 16
6771; CHECK-NEXT:    ld32.w t0, (sp, 20)
6772; CHECK-NEXT:    ld32.w t1, (sp, 16)
6773; CHECK-NEXT:    movi16 l0, 0
6774; CHECK-NEXT:    cmplt16 a1, l0
6775; CHECK-NEXT:    mvc32 l0
6776; CHECK-NEXT:    st16.w l0, (sp, 8)
6777; CHECK-NEXT:    movih32 l0, 729
6778; CHECK-NEXT:    ori32 l0, l0, 2033
6779; CHECK-NEXT:    cmphs16 a0, l0
6780; CHECK-NEXT:    mvcv16 a0
6781; CHECK-NEXT:    cmpnei16 a1, 0
6782; CHECK-NEXT:    mvc32 a1
6783; CHECK-NEXT:    st16.w a1, (sp, 4)
6784; CHECK-NEXT:    ld16.w a1, (sp, 8)
6785; CHECK-NEXT:    btsti32 a1, 0
6786; CHECK-NEXT:    mvc32 a1
6787; CHECK-NEXT:    ld16.w l0, (sp, 4)
6788; CHECK-NEXT:    btsti32 l0, 0
6789; CHECK-NEXT:    movf32 a1, a0
6790; CHECK-NEXT:    btsti32 a1, 0
6791; CHECK-NEXT:    movt32 a2, t1
6792; CHECK-NEXT:    movt32 a3, t0
6793; CHECK-NEXT:    mov16 a0, a2
6794; CHECK-NEXT:    mov16 a1, a3
6795; CHECK-NEXT:    addi16 sp, sp, 12
6796; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6797; CHECK-NEXT:    addi16 sp, sp, 4
6798; CHECK-NEXT:    rts16
6799;
6800; GENERIC-LABEL: selectRX_slt_i64:
6801; GENERIC:       # %bb.0: # %entry
6802; GENERIC-NEXT:    subi16 sp, sp, 12
6803; GENERIC-NEXT:    .cfi_def_cfa_offset 12
6804; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
6805; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
6806; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6807; GENERIC-NEXT:    .cfi_offset l2, -4
6808; GENERIC-NEXT:    .cfi_offset l1, -8
6809; GENERIC-NEXT:    .cfi_offset l0, -12
6810; GENERIC-NEXT:    subi16 sp, sp, 4
6811; GENERIC-NEXT:    .cfi_def_cfa_offset 16
6812; GENERIC-NEXT:    movi16 l0, 0
6813; GENERIC-NEXT:    cmplt16 a1, l0
6814; GENERIC-NEXT:    mvcv16 l0
6815; GENERIC-NEXT:    movi16 l1, 2
6816; GENERIC-NEXT:    lsli16 l1, l1, 24
6817; GENERIC-NEXT:    movi16 l2, 217
6818; GENERIC-NEXT:    lsli16 l2, l2, 16
6819; GENERIC-NEXT:    or16 l2, l1
6820; GENERIC-NEXT:    movi16 l1, 7
6821; GENERIC-NEXT:    lsli16 l1, l1, 8
6822; GENERIC-NEXT:    or16 l1, l2
6823; GENERIC-NEXT:    movi16 l2, 241
6824; GENERIC-NEXT:    or16 l2, l1
6825; GENERIC-NEXT:    cmphs16 a0, l2
6826; GENERIC-NEXT:    mvcv16 a0
6827; GENERIC-NEXT:    cmpnei16 a1, 0
6828; GENERIC-NEXT:    mvcv16 a1
6829; GENERIC-NEXT:    btsti16 a1, 0
6830; GENERIC-NEXT:    bf16 .LBB166_5
6831; GENERIC-NEXT:  # %bb.1: # %entry
6832; GENERIC-NEXT:    btsti16 a0, 0
6833; GENERIC-NEXT:    bt16 .LBB166_6
6834; GENERIC-NEXT:  .LBB166_2: # %entry
6835; GENERIC-NEXT:    btsti16 a0, 0
6836; GENERIC-NEXT:    bf16 .LBB166_4
6837; GENERIC-NEXT:  .LBB166_3:
6838; GENERIC-NEXT:    ld16.w a3, (sp, 20)
6839; GENERIC-NEXT:  .LBB166_4: # %entry
6840; GENERIC-NEXT:    mov16 a0, a2
6841; GENERIC-NEXT:    mov16 a1, a3
6842; GENERIC-NEXT:    addi16 sp, sp, 4
6843; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
6844; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
6845; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
6846; GENERIC-NEXT:    addi16 sp, sp, 12
6847; GENERIC-NEXT:    rts16
6848; GENERIC-NEXT:  .LBB166_5: # %entry
6849; GENERIC-NEXT:    movi16 a0, 1
6850; GENERIC-NEXT:    subu16 a0, l0
6851; GENERIC-NEXT:    btsti16 a0, 0
6852; GENERIC-NEXT:    bf16 .LBB166_2
6853; GENERIC-NEXT:  .LBB166_6:
6854; GENERIC-NEXT:    ld16.w a2, (sp, 16)
6855; GENERIC-NEXT:    btsti16 a0, 0
6856; GENERIC-NEXT:    bt16 .LBB166_3
6857; GENERIC-NEXT:    br32 .LBB166_4
6858entry:
6859  %icmp = icmp slt i64 %x, 47777777
6860  %ret = select i1 %icmp, i64 %m, i64 %n
6861  ret i64 %ret
6862}
6863
6864define i64 @selectC_slt_i64(i1 %c, i64 %n, i64 %m) {
6865; CHECK-LABEL: selectC_slt_i64:
6866; CHECK:       # %bb.0: # %entry
6867; CHECK-NEXT:    ld32.w t0, (sp, 0)
6868; CHECK-NEXT:    btsti32 a0, 0
6869; CHECK-NEXT:    movt32 a1, a3
6870; CHECK-NEXT:    movt32 a2, t0
6871; CHECK-NEXT:    mov16 a0, a1
6872; CHECK-NEXT:    mov16 a1, a2
6873; CHECK-NEXT:    rts16
6874;
6875; GENERIC-LABEL: selectC_slt_i64:
6876; GENERIC:       # %bb.0: # %entry
6877; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6878; GENERIC-NEXT:    subi16 sp, sp, 4
6879; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6880; GENERIC-NEXT:    btsti16 a0, 0
6881; GENERIC-NEXT:    bt16 .LBB167_2
6882; GENERIC-NEXT:  # %bb.1: # %entry
6883; GENERIC-NEXT:    mov16 a3, a1
6884; GENERIC-NEXT:  .LBB167_2: # %entry
6885; GENERIC-NEXT:    btsti16 a0, 0
6886; GENERIC-NEXT:    bf16 .LBB167_4
6887; GENERIC-NEXT:  # %bb.3:
6888; GENERIC-NEXT:    ld16.w a2, (sp, 4)
6889; GENERIC-NEXT:  .LBB167_4: # %entry
6890; GENERIC-NEXT:    mov16 a0, a3
6891; GENERIC-NEXT:    mov16 a1, a2
6892; GENERIC-NEXT:    addi16 sp, sp, 4
6893; GENERIC-NEXT:    rts16
6894entry:
6895  %ret = select i1 %c, i64 %m, i64 %n
6896  ret i64 %ret
6897}
6898
6899
6900define i16 @selectRR_slt_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
6901; CHECK-LABEL: selectRR_slt_i16:
6902; CHECK:       # %bb.0: # %entry
6903; CHECK-NEXT:    sexth16 a0, a0
6904; CHECK-NEXT:    sexth16 a1, a1
6905; CHECK-NEXT:    cmplt16 a1, a0
6906; CHECK-NEXT:    movt32 a2, a3
6907; CHECK-NEXT:    mov16 a0, a2
6908; CHECK-NEXT:    rts16
6909;
6910; GENERIC-LABEL: selectRR_slt_i16:
6911; GENERIC:       # %bb.0: # %entry
6912; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6913; GENERIC-NEXT:    subi16 sp, sp, 4
6914; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6915; GENERIC-NEXT:    sexth16 a0, a0
6916; GENERIC-NEXT:    sexth16 a1, a1
6917; GENERIC-NEXT:    cmplt16 a1, a0
6918; GENERIC-NEXT:    mvcv16 a0
6919; GENERIC-NEXT:    movi16 a1, 1
6920; GENERIC-NEXT:    subu16 a1, a0
6921; GENERIC-NEXT:    btsti16 a1, 0
6922; GENERIC-NEXT:    bt16 .LBB168_2
6923; GENERIC-NEXT:  # %bb.1: # %entry
6924; GENERIC-NEXT:    mov16 a3, a2
6925; GENERIC-NEXT:  .LBB168_2: # %entry
6926; GENERIC-NEXT:    mov16 a0, a3
6927; GENERIC-NEXT:    addi16 sp, sp, 4
6928; GENERIC-NEXT:    rts16
6929entry:
6930  %icmp = icmp slt i16 %y, %x
6931  %ret = select i1 %icmp, i16 %m, i16 %n
6932  ret i16 %ret
6933}
6934
6935define i16 @selectRI_slt_i16(i16 %x, i16 %n, i16 %m) {
6936; CHECK-LABEL: selectRI_slt_i16:
6937; CHECK:       # %bb.0: # %entry
6938; CHECK-NEXT:    sexth16 a0, a0
6939; CHECK-NEXT:    cmplti16 a0, 10
6940; CHECK-NEXT:    movt32 a1, a2
6941; CHECK-NEXT:    mov16 a0, a1
6942; CHECK-NEXT:    rts16
6943;
6944; GENERIC-LABEL: selectRI_slt_i16:
6945; GENERIC:       # %bb.0: # %entry
6946; GENERIC-NEXT:    .cfi_def_cfa_offset 0
6947; GENERIC-NEXT:    subi16 sp, sp, 4
6948; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6949; GENERIC-NEXT:    sexth16 a0, a0
6950; GENERIC-NEXT:    cmplti16 a0, 10
6951; GENERIC-NEXT:    mvcv16 a0
6952; GENERIC-NEXT:    movi16 a3, 1
6953; GENERIC-NEXT:    subu16 a3, a0
6954; GENERIC-NEXT:    btsti16 a3, 0
6955; GENERIC-NEXT:    bt16 .LBB169_2
6956; GENERIC-NEXT:  # %bb.1: # %entry
6957; GENERIC-NEXT:    mov16 a2, a1
6958; GENERIC-NEXT:  .LBB169_2: # %entry
6959; GENERIC-NEXT:    mov16 a0, a2
6960; GENERIC-NEXT:    addi16 sp, sp, 4
6961; GENERIC-NEXT:    rts16
6962entry:
6963  %icmp = icmp slt i16 %x, 10
6964  %ret = select i1 %icmp, i16 %m, i16 %n
6965  ret i16 %ret
6966}
6967
6968define i16 @selectRX_slt_i16(i16 %x, i16 %n, i16 %m) {
6969; CHECK-LABEL: selectRX_slt_i16:
6970; CHECK:       # %bb.0: # %entry
6971; CHECK-NEXT:    sexth16 a0, a0
6972; CHECK-NEXT:    cmplti32 a0, 2033
6973; CHECK-NEXT:    movt32 a1, a2
6974; CHECK-NEXT:    mov16 a0, a1
6975; CHECK-NEXT:    rts16
6976;
6977; GENERIC-LABEL: selectRX_slt_i16:
6978; GENERIC:       # %bb.0: # %entry
6979; GENERIC-NEXT:    subi16 sp, sp, 4
6980; GENERIC-NEXT:    .cfi_def_cfa_offset 4
6981; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
6982; GENERIC-NEXT:    .cfi_offset l0, -4
6983; GENERIC-NEXT:    subi16 sp, sp, 4
6984; GENERIC-NEXT:    .cfi_def_cfa_offset 8
6985; GENERIC-NEXT:    sexth16 a0, a0
6986; GENERIC-NEXT:    movi16 a3, 0
6987; GENERIC-NEXT:    lsli16 l0, a3, 24
6988; GENERIC-NEXT:    lsli16 a3, a3, 16
6989; GENERIC-NEXT:    or16 a3, l0
6990; GENERIC-NEXT:    movi16 l0, 7
6991; GENERIC-NEXT:    lsli16 l0, l0, 8
6992; GENERIC-NEXT:    or16 l0, a3
6993; GENERIC-NEXT:    movi16 a3, 241
6994; GENERIC-NEXT:    or16 a3, l0
6995; GENERIC-NEXT:    cmplt16 a0, a3
6996; GENERIC-NEXT:    mvcv16 a0
6997; GENERIC-NEXT:    movi16 a3, 1
6998; GENERIC-NEXT:    subu16 a3, a0
6999; GENERIC-NEXT:    btsti16 a3, 0
7000; GENERIC-NEXT:    bt16 .LBB170_2
7001; GENERIC-NEXT:  # %bb.1: # %entry
7002; GENERIC-NEXT:    mov16 a2, a1
7003; GENERIC-NEXT:  .LBB170_2: # %entry
7004; GENERIC-NEXT:    mov16 a0, a2
7005; GENERIC-NEXT:    addi16 sp, sp, 4
7006; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7007; GENERIC-NEXT:    addi16 sp, sp, 4
7008; GENERIC-NEXT:    rts16
7009entry:
7010  %icmp = icmp slt i16 %x, 47777777
7011  %ret = select i1 %icmp, i16 %m, i16 %n
7012  ret i16 %ret
7013}
7014
7015define i16 @selectC_slt_i16(i1 %c, i16 %n, i16 %m) {
7016; CHECK-LABEL: selectC_slt_i16:
7017; CHECK:       # %bb.0: # %entry
7018; CHECK-NEXT:    btsti32 a0, 0
7019; CHECK-NEXT:    movt32 a1, a2
7020; CHECK-NEXT:    mov16 a0, a1
7021; CHECK-NEXT:    rts16
7022;
7023; GENERIC-LABEL: selectC_slt_i16:
7024; GENERIC:       # %bb.0: # %entry
7025; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7026; GENERIC-NEXT:    subi16 sp, sp, 4
7027; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7028; GENERIC-NEXT:    btsti16 a0, 0
7029; GENERIC-NEXT:    bt16 .LBB171_2
7030; GENERIC-NEXT:  # %bb.1: # %entry
7031; GENERIC-NEXT:    mov16 a2, a1
7032; GENERIC-NEXT:  .LBB171_2: # %entry
7033; GENERIC-NEXT:    mov16 a0, a2
7034; GENERIC-NEXT:    addi16 sp, sp, 4
7035; GENERIC-NEXT:    rts16
7036entry:
7037  %ret = select i1 %c, i16 %m, i16 %n
7038  ret i16 %ret
7039}
7040
7041
7042define i8 @selectRR_slt_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
7043; CHECK-LABEL: selectRR_slt_i8:
7044; CHECK:       # %bb.0: # %entry
7045; CHECK-NEXT:    sextb16 a0, a0
7046; CHECK-NEXT:    sextb16 a1, a1
7047; CHECK-NEXT:    cmplt16 a1, a0
7048; CHECK-NEXT:    movt32 a2, a3
7049; CHECK-NEXT:    mov16 a0, a2
7050; CHECK-NEXT:    rts16
7051;
7052; GENERIC-LABEL: selectRR_slt_i8:
7053; GENERIC:       # %bb.0: # %entry
7054; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7055; GENERIC-NEXT:    subi16 sp, sp, 4
7056; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7057; GENERIC-NEXT:    sextb16 a0, a0
7058; GENERIC-NEXT:    sextb16 a1, a1
7059; GENERIC-NEXT:    cmplt16 a1, a0
7060; GENERIC-NEXT:    mvcv16 a0
7061; GENERIC-NEXT:    movi16 a1, 1
7062; GENERIC-NEXT:    subu16 a1, a0
7063; GENERIC-NEXT:    btsti16 a1, 0
7064; GENERIC-NEXT:    bt16 .LBB172_2
7065; GENERIC-NEXT:  # %bb.1: # %entry
7066; GENERIC-NEXT:    mov16 a3, a2
7067; GENERIC-NEXT:  .LBB172_2: # %entry
7068; GENERIC-NEXT:    mov16 a0, a3
7069; GENERIC-NEXT:    addi16 sp, sp, 4
7070; GENERIC-NEXT:    rts16
7071entry:
7072  %icmp = icmp slt i8 %y, %x
7073  %ret = select i1 %icmp, i8 %m, i8 %n
7074  ret i8 %ret
7075}
7076
7077define i8 @selectRI_slt_i8(i8 %x, i8 %n, i8 %m) {
7078; CHECK-LABEL: selectRI_slt_i8:
7079; CHECK:       # %bb.0: # %entry
7080; CHECK-NEXT:    sextb16 a0, a0
7081; CHECK-NEXT:    cmplti16 a0, 10
7082; CHECK-NEXT:    movt32 a1, a2
7083; CHECK-NEXT:    mov16 a0, a1
7084; CHECK-NEXT:    rts16
7085;
7086; GENERIC-LABEL: selectRI_slt_i8:
7087; GENERIC:       # %bb.0: # %entry
7088; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7089; GENERIC-NEXT:    subi16 sp, sp, 4
7090; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7091; GENERIC-NEXT:    sextb16 a0, a0
7092; GENERIC-NEXT:    cmplti16 a0, 10
7093; GENERIC-NEXT:    mvcv16 a0
7094; GENERIC-NEXT:    movi16 a3, 1
7095; GENERIC-NEXT:    subu16 a3, a0
7096; GENERIC-NEXT:    btsti16 a3, 0
7097; GENERIC-NEXT:    bt16 .LBB173_2
7098; GENERIC-NEXT:  # %bb.1: # %entry
7099; GENERIC-NEXT:    mov16 a2, a1
7100; GENERIC-NEXT:  .LBB173_2: # %entry
7101; GENERIC-NEXT:    mov16 a0, a2
7102; GENERIC-NEXT:    addi16 sp, sp, 4
7103; GENERIC-NEXT:    rts16
7104entry:
7105  %icmp = icmp slt i8 %x, 10
7106  %ret = select i1 %icmp, i8 %m, i8 %n
7107  ret i8 %ret
7108}
7109
7110define i8 @selectRX_slt_i8(i8 %x, i8 %n, i8 %m) {
7111; CHECK-LABEL: selectRX_slt_i8:
7112; CHECK:       # %bb.0: # %entry
7113; CHECK-NEXT:    sextb16 a0, a0
7114; CHECK-NEXT:    movih32 a3, 65535
7115; CHECK-NEXT:    ori32 a3, a3, 65521
7116; CHECK-NEXT:    cmplt16 a0, a3
7117; CHECK-NEXT:    movt32 a1, a2
7118; CHECK-NEXT:    mov16 a0, a1
7119; CHECK-NEXT:    rts16
7120;
7121; GENERIC-LABEL: selectRX_slt_i8:
7122; GENERIC:       # %bb.0: # %entry
7123; GENERIC-NEXT:    subi16 sp, sp, 8
7124; GENERIC-NEXT:    .cfi_def_cfa_offset 8
7125; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
7126; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7127; GENERIC-NEXT:    .cfi_offset l1, -4
7128; GENERIC-NEXT:    .cfi_offset l0, -8
7129; GENERIC-NEXT:    subi16 sp, sp, 4
7130; GENERIC-NEXT:    .cfi_def_cfa_offset 12
7131; GENERIC-NEXT:    sextb16 a0, a0
7132; GENERIC-NEXT:    movi16 a3, 255
7133; GENERIC-NEXT:    lsli16 l0, a3, 24
7134; GENERIC-NEXT:    lsli16 l1, a3, 16
7135; GENERIC-NEXT:    or16 l1, l0
7136; GENERIC-NEXT:    lsli16 a3, a3, 8
7137; GENERIC-NEXT:    or16 a3, l1
7138; GENERIC-NEXT:    movi16 l0, 241
7139; GENERIC-NEXT:    or16 l0, a3
7140; GENERIC-NEXT:    cmplt16 a0, l0
7141; GENERIC-NEXT:    mvcv16 a0
7142; GENERIC-NEXT:    movi16 a3, 1
7143; GENERIC-NEXT:    subu16 a3, a0
7144; GENERIC-NEXT:    btsti16 a3, 0
7145; GENERIC-NEXT:    bt16 .LBB174_2
7146; GENERIC-NEXT:  # %bb.1: # %entry
7147; GENERIC-NEXT:    mov16 a2, a1
7148; GENERIC-NEXT:  .LBB174_2: # %entry
7149; GENERIC-NEXT:    mov16 a0, a2
7150; GENERIC-NEXT:    addi16 sp, sp, 4
7151; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7152; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
7153; GENERIC-NEXT:    addi16 sp, sp, 8
7154; GENERIC-NEXT:    rts16
7155entry:
7156  %icmp = icmp slt i8 %x, 47777777
7157  %ret = select i1 %icmp, i8 %m, i8 %n
7158  ret i8 %ret
7159}
7160
7161define i8 @selectC_slt_i8(i1 %c, i8 %n, i8 %m) {
7162; CHECK-LABEL: selectC_slt_i8:
7163; CHECK:       # %bb.0: # %entry
7164; CHECK-NEXT:    btsti32 a0, 0
7165; CHECK-NEXT:    movt32 a1, a2
7166; CHECK-NEXT:    mov16 a0, a1
7167; CHECK-NEXT:    rts16
7168;
7169; GENERIC-LABEL: selectC_slt_i8:
7170; GENERIC:       # %bb.0: # %entry
7171; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7172; GENERIC-NEXT:    subi16 sp, sp, 4
7173; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7174; GENERIC-NEXT:    btsti16 a0, 0
7175; GENERIC-NEXT:    bt16 .LBB175_2
7176; GENERIC-NEXT:  # %bb.1: # %entry
7177; GENERIC-NEXT:    mov16 a2, a1
7178; GENERIC-NEXT:  .LBB175_2: # %entry
7179; GENERIC-NEXT:    mov16 a0, a2
7180; GENERIC-NEXT:    addi16 sp, sp, 4
7181; GENERIC-NEXT:    rts16
7182entry:
7183  %ret = select i1 %c, i8 %m, i8 %n
7184  ret i8 %ret
7185}
7186
7187
7188define i1 @selectRR_slt_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
7189; CHECK-LABEL: selectRR_slt_i1:
7190; CHECK:       # %bb.0: # %entry
7191; CHECK-NEXT:    btsti32 a0, 0
7192; CHECK-NEXT:    movt32 a3, a2
7193; CHECK-NEXT:    btsti32 a1, 0
7194; CHECK-NEXT:    movt32 a2, a3
7195; CHECK-NEXT:    mov16 a0, a2
7196; CHECK-NEXT:    rts16
7197;
7198; GENERIC-LABEL: selectRR_slt_i1:
7199; GENERIC:       # %bb.0: # %entry
7200; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7201; GENERIC-NEXT:    subi16 sp, sp, 4
7202; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7203; GENERIC-NEXT:    btsti16 a0, 0
7204; GENERIC-NEXT:    mov16 a0, a2
7205; GENERIC-NEXT:    bf16 .LBB176_3
7206; GENERIC-NEXT:  # %bb.1: # %entry
7207; GENERIC-NEXT:    btsti16 a1, 0
7208; GENERIC-NEXT:    bf16 .LBB176_4
7209; GENERIC-NEXT:  .LBB176_2: # %entry
7210; GENERIC-NEXT:    addi16 sp, sp, 4
7211; GENERIC-NEXT:    rts16
7212; GENERIC-NEXT:  .LBB176_3: # %entry
7213; GENERIC-NEXT:    mov16 a0, a3
7214; GENERIC-NEXT:    btsti16 a1, 0
7215; GENERIC-NEXT:    bt16 .LBB176_2
7216; GENERIC-NEXT:  .LBB176_4: # %entry
7217; GENERIC-NEXT:    mov16 a0, a2
7218; GENERIC-NEXT:    addi16 sp, sp, 4
7219; GENERIC-NEXT:    rts16
7220entry:
7221  %icmp = icmp slt i1 %y, %x
7222  %ret = select i1 %icmp, i1 %m, i1 %n
7223  ret i1 %ret
7224}
7225
7226define i1 @selectRI_slt_i1(i1 %x, i1 %n, i1 %m) {
7227; CHECK-LABEL: selectRI_slt_i1:
7228; CHECK:       # %bb.0: # %entry
7229; CHECK-NEXT:    btsti32 a0, 0
7230; CHECK-NEXT:    movt32 a1, a2
7231; CHECK-NEXT:    mov16 a0, a1
7232; CHECK-NEXT:    rts16
7233;
7234; GENERIC-LABEL: selectRI_slt_i1:
7235; GENERIC:       # %bb.0: # %entry
7236; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7237; GENERIC-NEXT:    subi16 sp, sp, 4
7238; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7239; GENERIC-NEXT:    btsti16 a0, 0
7240; GENERIC-NEXT:    bt16 .LBB177_2
7241; GENERIC-NEXT:  # %bb.1: # %entry
7242; GENERIC-NEXT:    mov16 a2, a1
7243; GENERIC-NEXT:  .LBB177_2: # %entry
7244; GENERIC-NEXT:    mov16 a0, a2
7245; GENERIC-NEXT:    addi16 sp, sp, 4
7246; GENERIC-NEXT:    rts16
7247entry:
7248  %icmp = icmp slt i1 %x, 10
7249  %ret = select i1 %icmp, i1 %m, i1 %n
7250  ret i1 %ret
7251}
7252
7253define i1 @selectRX_slt_i1(i1 %x, i1 %n, i1 %m) {
7254; CHECK-LABEL: selectRX_slt_i1:
7255; CHECK:       # %bb.0: # %entry
7256; CHECK-NEXT:    mov16 a0, a1
7257; CHECK-NEXT:    rts16
7258;
7259; GENERIC-LABEL: selectRX_slt_i1:
7260; GENERIC:       # %bb.0: # %entry
7261; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7262; GENERIC-NEXT:    subi16 sp, sp, 4
7263; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7264; GENERIC-NEXT:    mov16 a0, a1
7265; GENERIC-NEXT:    addi16 sp, sp, 4
7266; GENERIC-NEXT:    rts16
7267entry:
7268  %icmp = icmp slt i1 %x, 47777777
7269  %ret = select i1 %icmp, i1 %m, i1 %n
7270  ret i1 %ret
7271}
7272
7273define i1 @selectC_slt_i1(i1 %c, i1 %n, i1 %m) {
7274; CHECK-LABEL: selectC_slt_i1:
7275; CHECK:       # %bb.0: # %entry
7276; CHECK-NEXT:    btsti32 a0, 0
7277; CHECK-NEXT:    movt32 a1, a2
7278; CHECK-NEXT:    mov16 a0, a1
7279; CHECK-NEXT:    rts16
7280;
7281; GENERIC-LABEL: selectC_slt_i1:
7282; GENERIC:       # %bb.0: # %entry
7283; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7284; GENERIC-NEXT:    subi16 sp, sp, 4
7285; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7286; GENERIC-NEXT:    btsti16 a0, 0
7287; GENERIC-NEXT:    bt16 .LBB179_2
7288; GENERIC-NEXT:  # %bb.1: # %entry
7289; GENERIC-NEXT:    mov16 a2, a1
7290; GENERIC-NEXT:  .LBB179_2: # %entry
7291; GENERIC-NEXT:    mov16 a0, a2
7292; GENERIC-NEXT:    addi16 sp, sp, 4
7293; GENERIC-NEXT:    rts16
7294entry:
7295  %ret = select i1 %c, i1 %m, i1 %n
7296  ret i1 %ret
7297}
7298
7299define i32 @selectRR_sle_i32(i32 %x, i32 %y, i32 %n, i32 %m) {
7300; CHECK-LABEL: selectRR_sle_i32:
7301; CHECK:       # %bb.0: # %entry
7302; CHECK-NEXT:    cmplt16 a0, a1
7303; CHECK-NEXT:    movf32 a2, a3
7304; CHECK-NEXT:    mov16 a0, a2
7305; CHECK-NEXT:    rts16
7306;
7307; GENERIC-LABEL: selectRR_sle_i32:
7308; GENERIC:       # %bb.0: # %entry
7309; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7310; GENERIC-NEXT:    subi16 sp, sp, 4
7311; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7312; GENERIC-NEXT:    cmplt16 a0, a1
7313; GENERIC-NEXT:    mvcv16 a0
7314; GENERIC-NEXT:    btsti16 a0, 0
7315; GENERIC-NEXT:    bt16 .LBB180_2
7316; GENERIC-NEXT:  # %bb.1: # %entry
7317; GENERIC-NEXT:    mov16 a3, a2
7318; GENERIC-NEXT:  .LBB180_2: # %entry
7319; GENERIC-NEXT:    mov16 a0, a3
7320; GENERIC-NEXT:    addi16 sp, sp, 4
7321; GENERIC-NEXT:    rts16
7322entry:
7323  %icmp = icmp sle i32 %y, %x
7324  %ret = select i1 %icmp, i32 %m, i32 %n
7325  ret i32 %ret
7326}
7327
7328define i32 @selectRI_sle_i32(i32 %x, i32 %n, i32 %m) {
7329; CHECK-LABEL: selectRI_sle_i32:
7330; CHECK:       # %bb.0: # %entry
7331; CHECK-NEXT:    cmplti16 a0, 11
7332; CHECK-NEXT:    movt32 a1, a2
7333; CHECK-NEXT:    mov16 a0, a1
7334; CHECK-NEXT:    rts16
7335;
7336; GENERIC-LABEL: selectRI_sle_i32:
7337; GENERIC:       # %bb.0: # %entry
7338; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7339; GENERIC-NEXT:    subi16 sp, sp, 4
7340; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7341; GENERIC-NEXT:    cmplti16 a0, 11
7342; GENERIC-NEXT:    mvcv16 a0
7343; GENERIC-NEXT:    movi16 a3, 1
7344; GENERIC-NEXT:    subu16 a3, a0
7345; GENERIC-NEXT:    btsti16 a3, 0
7346; GENERIC-NEXT:    bt16 .LBB181_2
7347; GENERIC-NEXT:  # %bb.1: # %entry
7348; GENERIC-NEXT:    mov16 a2, a1
7349; GENERIC-NEXT:  .LBB181_2: # %entry
7350; GENERIC-NEXT:    mov16 a0, a2
7351; GENERIC-NEXT:    addi16 sp, sp, 4
7352; GENERIC-NEXT:    rts16
7353entry:
7354  %icmp = icmp sle i32 %x, 10
7355  %ret = select i1 %icmp, i32 %m, i32 %n
7356  ret i32 %ret
7357}
7358
7359define i32 @selectRX_sle_i32(i32 %x, i32 %n, i32 %m) {
7360; CHECK-LABEL: selectRX_sle_i32:
7361; CHECK:       # %bb.0: # %entry
7362; CHECK-NEXT:    movih32 a3, 729
7363; CHECK-NEXT:    ori32 a3, a3, 2034
7364; CHECK-NEXT:    cmplt16 a0, a3
7365; CHECK-NEXT:    movt32 a1, a2
7366; CHECK-NEXT:    mov16 a0, a1
7367; CHECK-NEXT:    rts16
7368;
7369; GENERIC-LABEL: selectRX_sle_i32:
7370; GENERIC:       # %bb.0: # %entry
7371; GENERIC-NEXT:    subi16 sp, sp, 4
7372; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7373; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7374; GENERIC-NEXT:    .cfi_offset l0, -4
7375; GENERIC-NEXT:    subi16 sp, sp, 4
7376; GENERIC-NEXT:    .cfi_def_cfa_offset 8
7377; GENERIC-NEXT:    movi16 a3, 2
7378; GENERIC-NEXT:    lsli16 a3, a3, 24
7379; GENERIC-NEXT:    movi16 l0, 217
7380; GENERIC-NEXT:    lsli16 l0, l0, 16
7381; GENERIC-NEXT:    or16 l0, a3
7382; GENERIC-NEXT:    movi16 a3, 7
7383; GENERIC-NEXT:    lsli16 a3, a3, 8
7384; GENERIC-NEXT:    or16 a3, l0
7385; GENERIC-NEXT:    movi16 l0, 242
7386; GENERIC-NEXT:    or16 l0, a3
7387; GENERIC-NEXT:    cmplt16 a0, l0
7388; GENERIC-NEXT:    mvcv16 a0
7389; GENERIC-NEXT:    movi16 a3, 1
7390; GENERIC-NEXT:    subu16 a3, a0
7391; GENERIC-NEXT:    btsti16 a3, 0
7392; GENERIC-NEXT:    bt16 .LBB182_2
7393; GENERIC-NEXT:  # %bb.1: # %entry
7394; GENERIC-NEXT:    mov16 a2, a1
7395; GENERIC-NEXT:  .LBB182_2: # %entry
7396; GENERIC-NEXT:    mov16 a0, a2
7397; GENERIC-NEXT:    addi16 sp, sp, 4
7398; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7399; GENERIC-NEXT:    addi16 sp, sp, 4
7400; GENERIC-NEXT:    rts16
7401entry:
7402  %icmp = icmp sle i32 %x, 47777777
7403  %ret = select i1 %icmp, i32 %m, i32 %n
7404  ret i32 %ret
7405}
7406
7407define i32 @selectC_sle_i32(i1 %c, i32 %n, i32 %m) {
7408; CHECK-LABEL: selectC_sle_i32:
7409; CHECK:       # %bb.0: # %entry
7410; CHECK-NEXT:    btsti32 a0, 0
7411; CHECK-NEXT:    movt32 a1, a2
7412; CHECK-NEXT:    mov16 a0, a1
7413; CHECK-NEXT:    rts16
7414;
7415; GENERIC-LABEL: selectC_sle_i32:
7416; GENERIC:       # %bb.0: # %entry
7417; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7418; GENERIC-NEXT:    subi16 sp, sp, 4
7419; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7420; GENERIC-NEXT:    btsti16 a0, 0
7421; GENERIC-NEXT:    bt16 .LBB183_2
7422; GENERIC-NEXT:  # %bb.1: # %entry
7423; GENERIC-NEXT:    mov16 a2, a1
7424; GENERIC-NEXT:  .LBB183_2: # %entry
7425; GENERIC-NEXT:    mov16 a0, a2
7426; GENERIC-NEXT:    addi16 sp, sp, 4
7427; GENERIC-NEXT:    rts16
7428entry:
7429  %ret = select i1 %c, i32 %m, i32 %n
7430  ret i32 %ret
7431}
7432
7433define i64 @selectRR_sle_i64(i64 %x, i64 %y, i64 %n, i64 %m) {
7434; CHECK-LABEL: selectRR_sle_i64:
7435; CHECK:       # %bb.0: # %entry
7436; CHECK-NEXT:    .cfi_def_cfa_offset 0
7437; CHECK-NEXT:    subi16 sp, sp, 12
7438; CHECK-NEXT:    .cfi_def_cfa_offset 12
7439; CHECK-NEXT:    cmphs16 a0, a2
7440; CHECK-NEXT:    mvc32 a0
7441; CHECK-NEXT:    st16.w a0, (sp, 4)
7442; CHECK-NEXT:    cmpne16 a3, a1
7443; CHECK-NEXT:    mvc32 a0
7444; CHECK-NEXT:    st16.w a0, (sp, 8)
7445; CHECK-NEXT:    cmplt16 a1, a3
7446; CHECK-NEXT:    mvcv16 a0
7447; CHECK-NEXT:    ld16.w a1, (sp, 4)
7448; CHECK-NEXT:    btsti32 a1, 0
7449; CHECK-NEXT:    mvc32 a1
7450; CHECK-NEXT:    ld16.w a2, (sp, 8)
7451; CHECK-NEXT:    btsti32 a2, 0
7452; CHECK-NEXT:    movf32 a0, a1
7453; CHECK-NEXT:    addi16 a1, sp, 12
7454; CHECK-NEXT:    addi16 a2, sp, 20
7455; CHECK-NEXT:    btsti32 a0, 0
7456; CHECK-NEXT:    movt32 a1, a2
7457; CHECK-NEXT:    ld16.w a0, (a1, 0)
7458; CHECK-NEXT:    ld16.w a1, (a1, 4)
7459; CHECK-NEXT:    addi16 sp, sp, 12
7460; CHECK-NEXT:    rts16
7461;
7462; GENERIC-LABEL: selectRR_sle_i64:
7463; GENERIC:       # %bb.0: # %entry
7464; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7465; GENERIC-NEXT:    subi16 sp, sp, 4
7466; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7467; GENERIC-NEXT:    cmphs16 a0, a2
7468; GENERIC-NEXT:    mvcv16 a2
7469; GENERIC-NEXT:    cmplt16 a1, a3
7470; GENERIC-NEXT:    mvcv16 a0
7471; GENERIC-NEXT:    cmpne16 a3, a1
7472; GENERIC-NEXT:    mvcv16 a1
7473; GENERIC-NEXT:    btsti16 a1, 0
7474; GENERIC-NEXT:    bf16 .LBB184_2
7475; GENERIC-NEXT:  # %bb.1:
7476; GENERIC-NEXT:    movi16 a0, 1
7477; GENERIC-NEXT:    subu16 a0, a2
7478; GENERIC-NEXT:  .LBB184_2: # %entry
7479; GENERIC-NEXT:    btsti16 a0, 0
7480; GENERIC-NEXT:    bt16 .LBB184_4
7481; GENERIC-NEXT:  # %bb.3: # %entry
7482; GENERIC-NEXT:    movi16 a0, 4
7483; GENERIC-NEXT:    br32 .LBB184_5
7484; GENERIC-NEXT:  .LBB184_4:
7485; GENERIC-NEXT:    movi16 a0, 12
7486; GENERIC-NEXT:  .LBB184_5: # %entry
7487; GENERIC-NEXT:    addu16 a0, sp
7488; GENERIC-NEXT:    mov16 a1, a0
7489; GENERIC-NEXT:    ld16.w a0, (a0, 0)
7490; GENERIC-NEXT:    ld16.w a1, (a1, 4)
7491; GENERIC-NEXT:    addi16 sp, sp, 4
7492; GENERIC-NEXT:    rts16
7493entry:
7494  %icmp = icmp sle i64 %y, %x
7495  %ret = select i1 %icmp, i64 %m, i64 %n
7496  ret i64 %ret
7497}
7498
7499define i64 @selectRI_sle_i64(i64 %x, i64 %n, i64 %m) {
7500; CHECK-LABEL: selectRI_sle_i64:
7501; CHECK:       # %bb.0: # %entry
7502; CHECK-NEXT:    subi16 sp, sp, 4
7503; CHECK-NEXT:    .cfi_def_cfa_offset 4
7504; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7505; CHECK-NEXT:    .cfi_offset l0, -4
7506; CHECK-NEXT:    subi16 sp, sp, 12
7507; CHECK-NEXT:    .cfi_def_cfa_offset 16
7508; CHECK-NEXT:    ld32.w t0, (sp, 20)
7509; CHECK-NEXT:    ld32.w t1, (sp, 16)
7510; CHECK-NEXT:    movi16 l0, 0
7511; CHECK-NEXT:    cmplt16 a1, l0
7512; CHECK-NEXT:    mvc32 l0
7513; CHECK-NEXT:    st16.w l0, (sp, 4)
7514; CHECK-NEXT:    cmpnei16 a1, 0
7515; CHECK-NEXT:    mvc32 a1
7516; CHECK-NEXT:    st16.w a1, (sp, 8)
7517; CHECK-NEXT:    cmphsi16 a0, 11
7518; CHECK-NEXT:    mvcv16 a0
7519; CHECK-NEXT:    ld16.w a1, (sp, 4)
7520; CHECK-NEXT:    btsti32 a1, 0
7521; CHECK-NEXT:    mvc32 a1
7522; CHECK-NEXT:    ld16.w l0, (sp, 8)
7523; CHECK-NEXT:    btsti32 l0, 0
7524; CHECK-NEXT:    movf32 a1, a0
7525; CHECK-NEXT:    btsti32 a1, 0
7526; CHECK-NEXT:    movt32 a2, t1
7527; CHECK-NEXT:    movt32 a3, t0
7528; CHECK-NEXT:    mov16 a0, a2
7529; CHECK-NEXT:    mov16 a1, a3
7530; CHECK-NEXT:    addi16 sp, sp, 12
7531; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7532; CHECK-NEXT:    addi16 sp, sp, 4
7533; CHECK-NEXT:    rts16
7534;
7535; GENERIC-LABEL: selectRI_sle_i64:
7536; GENERIC:       # %bb.0: # %entry
7537; GENERIC-NEXT:    subi16 sp, sp, 4
7538; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7539; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7540; GENERIC-NEXT:    .cfi_offset l0, -4
7541; GENERIC-NEXT:    subi16 sp, sp, 4
7542; GENERIC-NEXT:    .cfi_def_cfa_offset 8
7543; GENERIC-NEXT:    movi16 l0, 0
7544; GENERIC-NEXT:    cmplt16 a1, l0
7545; GENERIC-NEXT:    mvcv16 l0
7546; GENERIC-NEXT:    cmphsi16 a0, 11
7547; GENERIC-NEXT:    mvcv16 a0
7548; GENERIC-NEXT:    cmpnei16 a1, 0
7549; GENERIC-NEXT:    mvcv16 a1
7550; GENERIC-NEXT:    btsti16 a1, 0
7551; GENERIC-NEXT:    bf16 .LBB185_5
7552; GENERIC-NEXT:  # %bb.1: # %entry
7553; GENERIC-NEXT:    btsti16 a0, 0
7554; GENERIC-NEXT:    bt16 .LBB185_6
7555; GENERIC-NEXT:  .LBB185_2: # %entry
7556; GENERIC-NEXT:    btsti16 a0, 0
7557; GENERIC-NEXT:    bf16 .LBB185_4
7558; GENERIC-NEXT:  .LBB185_3:
7559; GENERIC-NEXT:    ld16.w a3, (sp, 12)
7560; GENERIC-NEXT:  .LBB185_4: # %entry
7561; GENERIC-NEXT:    mov16 a0, a2
7562; GENERIC-NEXT:    mov16 a1, a3
7563; GENERIC-NEXT:    addi16 sp, sp, 4
7564; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7565; GENERIC-NEXT:    addi16 sp, sp, 4
7566; GENERIC-NEXT:    rts16
7567; GENERIC-NEXT:  .LBB185_5: # %entry
7568; GENERIC-NEXT:    movi16 a0, 1
7569; GENERIC-NEXT:    subu16 a0, l0
7570; GENERIC-NEXT:    btsti16 a0, 0
7571; GENERIC-NEXT:    bf16 .LBB185_2
7572; GENERIC-NEXT:  .LBB185_6:
7573; GENERIC-NEXT:    ld16.w a2, (sp, 8)
7574; GENERIC-NEXT:    btsti16 a0, 0
7575; GENERIC-NEXT:    bt16 .LBB185_3
7576; GENERIC-NEXT:    br32 .LBB185_4
7577entry:
7578  %icmp = icmp sle i64 %x, 10
7579  %ret = select i1 %icmp, i64 %m, i64 %n
7580  ret i64 %ret
7581}
7582
7583define i64 @selectRX_sle_i64(i64 %x, i64 %n, i64 %m) {
7584; CHECK-LABEL: selectRX_sle_i64:
7585; CHECK:       # %bb.0: # %entry
7586; CHECK-NEXT:    subi16 sp, sp, 4
7587; CHECK-NEXT:    .cfi_def_cfa_offset 4
7588; CHECK-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7589; CHECK-NEXT:    .cfi_offset l0, -4
7590; CHECK-NEXT:    subi16 sp, sp, 12
7591; CHECK-NEXT:    .cfi_def_cfa_offset 16
7592; CHECK-NEXT:    ld32.w t0, (sp, 20)
7593; CHECK-NEXT:    ld32.w t1, (sp, 16)
7594; CHECK-NEXT:    movi16 l0, 0
7595; CHECK-NEXT:    cmplt16 a1, l0
7596; CHECK-NEXT:    mvc32 l0
7597; CHECK-NEXT:    st16.w l0, (sp, 8)
7598; CHECK-NEXT:    movih32 l0, 729
7599; CHECK-NEXT:    ori32 l0, l0, 2034
7600; CHECK-NEXT:    cmphs16 a0, l0
7601; CHECK-NEXT:    mvcv16 a0
7602; CHECK-NEXT:    cmpnei16 a1, 0
7603; CHECK-NEXT:    mvc32 a1
7604; CHECK-NEXT:    st16.w a1, (sp, 4)
7605; CHECK-NEXT:    ld16.w a1, (sp, 8)
7606; CHECK-NEXT:    btsti32 a1, 0
7607; CHECK-NEXT:    mvc32 a1
7608; CHECK-NEXT:    ld16.w l0, (sp, 4)
7609; CHECK-NEXT:    btsti32 l0, 0
7610; CHECK-NEXT:    movf32 a1, a0
7611; CHECK-NEXT:    btsti32 a1, 0
7612; CHECK-NEXT:    movt32 a2, t1
7613; CHECK-NEXT:    movt32 a3, t0
7614; CHECK-NEXT:    mov16 a0, a2
7615; CHECK-NEXT:    mov16 a1, a3
7616; CHECK-NEXT:    addi16 sp, sp, 12
7617; CHECK-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7618; CHECK-NEXT:    addi16 sp, sp, 4
7619; CHECK-NEXT:    rts16
7620;
7621; GENERIC-LABEL: selectRX_sle_i64:
7622; GENERIC:       # %bb.0: # %entry
7623; GENERIC-NEXT:    subi16 sp, sp, 12
7624; GENERIC-NEXT:    .cfi_def_cfa_offset 12
7625; GENERIC-NEXT:    st16.w l2, (sp, 8) # 4-byte Folded Spill
7626; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
7627; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7628; GENERIC-NEXT:    .cfi_offset l2, -4
7629; GENERIC-NEXT:    .cfi_offset l1, -8
7630; GENERIC-NEXT:    .cfi_offset l0, -12
7631; GENERIC-NEXT:    subi16 sp, sp, 4
7632; GENERIC-NEXT:    .cfi_def_cfa_offset 16
7633; GENERIC-NEXT:    movi16 l0, 0
7634; GENERIC-NEXT:    cmplt16 a1, l0
7635; GENERIC-NEXT:    mvcv16 l0
7636; GENERIC-NEXT:    movi16 l1, 2
7637; GENERIC-NEXT:    lsli16 l1, l1, 24
7638; GENERIC-NEXT:    movi16 l2, 217
7639; GENERIC-NEXT:    lsli16 l2, l2, 16
7640; GENERIC-NEXT:    or16 l2, l1
7641; GENERIC-NEXT:    movi16 l1, 7
7642; GENERIC-NEXT:    lsli16 l1, l1, 8
7643; GENERIC-NEXT:    or16 l1, l2
7644; GENERIC-NEXT:    movi16 l2, 242
7645; GENERIC-NEXT:    or16 l2, l1
7646; GENERIC-NEXT:    cmphs16 a0, l2
7647; GENERIC-NEXT:    mvcv16 a0
7648; GENERIC-NEXT:    cmpnei16 a1, 0
7649; GENERIC-NEXT:    mvcv16 a1
7650; GENERIC-NEXT:    btsti16 a1, 0
7651; GENERIC-NEXT:    bf16 .LBB186_5
7652; GENERIC-NEXT:  # %bb.1: # %entry
7653; GENERIC-NEXT:    btsti16 a0, 0
7654; GENERIC-NEXT:    bt16 .LBB186_6
7655; GENERIC-NEXT:  .LBB186_2: # %entry
7656; GENERIC-NEXT:    btsti16 a0, 0
7657; GENERIC-NEXT:    bf16 .LBB186_4
7658; GENERIC-NEXT:  .LBB186_3:
7659; GENERIC-NEXT:    ld16.w a3, (sp, 20)
7660; GENERIC-NEXT:  .LBB186_4: # %entry
7661; GENERIC-NEXT:    mov16 a0, a2
7662; GENERIC-NEXT:    mov16 a1, a3
7663; GENERIC-NEXT:    addi16 sp, sp, 4
7664; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7665; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
7666; GENERIC-NEXT:    ld16.w l2, (sp, 8) # 4-byte Folded Reload
7667; GENERIC-NEXT:    addi16 sp, sp, 12
7668; GENERIC-NEXT:    rts16
7669; GENERIC-NEXT:  .LBB186_5: # %entry
7670; GENERIC-NEXT:    movi16 a0, 1
7671; GENERIC-NEXT:    subu16 a0, l0
7672; GENERIC-NEXT:    btsti16 a0, 0
7673; GENERIC-NEXT:    bf16 .LBB186_2
7674; GENERIC-NEXT:  .LBB186_6:
7675; GENERIC-NEXT:    ld16.w a2, (sp, 16)
7676; GENERIC-NEXT:    btsti16 a0, 0
7677; GENERIC-NEXT:    bt16 .LBB186_3
7678; GENERIC-NEXT:    br32 .LBB186_4
7679entry:
7680  %icmp = icmp sle i64 %x, 47777777
7681  %ret = select i1 %icmp, i64 %m, i64 %n
7682  ret i64 %ret
7683}
7684
7685define i64 @selectC_sle_i64(i1 %c, i64 %n, i64 %m) {
7686; CHECK-LABEL: selectC_sle_i64:
7687; CHECK:       # %bb.0: # %entry
7688; CHECK-NEXT:    ld32.w t0, (sp, 0)
7689; CHECK-NEXT:    btsti32 a0, 0
7690; CHECK-NEXT:    movt32 a1, a3
7691; CHECK-NEXT:    movt32 a2, t0
7692; CHECK-NEXT:    mov16 a0, a1
7693; CHECK-NEXT:    mov16 a1, a2
7694; CHECK-NEXT:    rts16
7695;
7696; GENERIC-LABEL: selectC_sle_i64:
7697; GENERIC:       # %bb.0: # %entry
7698; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7699; GENERIC-NEXT:    subi16 sp, sp, 4
7700; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7701; GENERIC-NEXT:    btsti16 a0, 0
7702; GENERIC-NEXT:    bt16 .LBB187_2
7703; GENERIC-NEXT:  # %bb.1: # %entry
7704; GENERIC-NEXT:    mov16 a3, a1
7705; GENERIC-NEXT:  .LBB187_2: # %entry
7706; GENERIC-NEXT:    btsti16 a0, 0
7707; GENERIC-NEXT:    bf16 .LBB187_4
7708; GENERIC-NEXT:  # %bb.3:
7709; GENERIC-NEXT:    ld16.w a2, (sp, 4)
7710; GENERIC-NEXT:  .LBB187_4: # %entry
7711; GENERIC-NEXT:    mov16 a0, a3
7712; GENERIC-NEXT:    mov16 a1, a2
7713; GENERIC-NEXT:    addi16 sp, sp, 4
7714; GENERIC-NEXT:    rts16
7715entry:
7716  %ret = select i1 %c, i64 %m, i64 %n
7717  ret i64 %ret
7718}
7719
7720
7721define i16 @selectRR_sle_i16(i16 %x, i16 %y, i16 %n, i16 %m) {
7722; CHECK-LABEL: selectRR_sle_i16:
7723; CHECK:       # %bb.0: # %entry
7724; CHECK-NEXT:    sexth16 a1, a1
7725; CHECK-NEXT:    sexth16 a0, a0
7726; CHECK-NEXT:    cmplt16 a0, a1
7727; CHECK-NEXT:    movf32 a2, a3
7728; CHECK-NEXT:    mov16 a0, a2
7729; CHECK-NEXT:    rts16
7730;
7731; GENERIC-LABEL: selectRR_sle_i16:
7732; GENERIC:       # %bb.0: # %entry
7733; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7734; GENERIC-NEXT:    subi16 sp, sp, 4
7735; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7736; GENERIC-NEXT:    sexth16 a1, a1
7737; GENERIC-NEXT:    sexth16 a0, a0
7738; GENERIC-NEXT:    cmplt16 a0, a1
7739; GENERIC-NEXT:    mvcv16 a0
7740; GENERIC-NEXT:    btsti16 a0, 0
7741; GENERIC-NEXT:    bt16 .LBB188_2
7742; GENERIC-NEXT:  # %bb.1: # %entry
7743; GENERIC-NEXT:    mov16 a3, a2
7744; GENERIC-NEXT:  .LBB188_2: # %entry
7745; GENERIC-NEXT:    mov16 a0, a3
7746; GENERIC-NEXT:    addi16 sp, sp, 4
7747; GENERIC-NEXT:    rts16
7748entry:
7749  %icmp = icmp sle i16 %y, %x
7750  %ret = select i1 %icmp, i16 %m, i16 %n
7751  ret i16 %ret
7752}
7753
7754define i16 @selectRI_sle_i16(i16 %x, i16 %n, i16 %m) {
7755; CHECK-LABEL: selectRI_sle_i16:
7756; CHECK:       # %bb.0: # %entry
7757; CHECK-NEXT:    sexth16 a0, a0
7758; CHECK-NEXT:    cmplti16 a0, 11
7759; CHECK-NEXT:    movt32 a1, a2
7760; CHECK-NEXT:    mov16 a0, a1
7761; CHECK-NEXT:    rts16
7762;
7763; GENERIC-LABEL: selectRI_sle_i16:
7764; GENERIC:       # %bb.0: # %entry
7765; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7766; GENERIC-NEXT:    subi16 sp, sp, 4
7767; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7768; GENERIC-NEXT:    sexth16 a0, a0
7769; GENERIC-NEXT:    cmplti16 a0, 11
7770; GENERIC-NEXT:    mvcv16 a0
7771; GENERIC-NEXT:    movi16 a3, 1
7772; GENERIC-NEXT:    subu16 a3, a0
7773; GENERIC-NEXT:    btsti16 a3, 0
7774; GENERIC-NEXT:    bt16 .LBB189_2
7775; GENERIC-NEXT:  # %bb.1: # %entry
7776; GENERIC-NEXT:    mov16 a2, a1
7777; GENERIC-NEXT:  .LBB189_2: # %entry
7778; GENERIC-NEXT:    mov16 a0, a2
7779; GENERIC-NEXT:    addi16 sp, sp, 4
7780; GENERIC-NEXT:    rts16
7781entry:
7782  %icmp = icmp sle i16 %x, 10
7783  %ret = select i1 %icmp, i16 %m, i16 %n
7784  ret i16 %ret
7785}
7786
7787define i16 @selectRX_sle_i16(i16 %x, i16 %n, i16 %m) {
7788; CHECK-LABEL: selectRX_sle_i16:
7789; CHECK:       # %bb.0: # %entry
7790; CHECK-NEXT:    sexth16 a0, a0
7791; CHECK-NEXT:    cmplti32 a0, 2034
7792; CHECK-NEXT:    movt32 a1, a2
7793; CHECK-NEXT:    mov16 a0, a1
7794; CHECK-NEXT:    rts16
7795;
7796; GENERIC-LABEL: selectRX_sle_i16:
7797; GENERIC:       # %bb.0: # %entry
7798; GENERIC-NEXT:    subi16 sp, sp, 4
7799; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7800; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7801; GENERIC-NEXT:    .cfi_offset l0, -4
7802; GENERIC-NEXT:    subi16 sp, sp, 4
7803; GENERIC-NEXT:    .cfi_def_cfa_offset 8
7804; GENERIC-NEXT:    sexth16 a0, a0
7805; GENERIC-NEXT:    movi16 a3, 0
7806; GENERIC-NEXT:    lsli16 l0, a3, 24
7807; GENERIC-NEXT:    lsli16 a3, a3, 16
7808; GENERIC-NEXT:    or16 a3, l0
7809; GENERIC-NEXT:    movi16 l0, 7
7810; GENERIC-NEXT:    lsli16 l0, l0, 8
7811; GENERIC-NEXT:    or16 l0, a3
7812; GENERIC-NEXT:    movi16 a3, 242
7813; GENERIC-NEXT:    or16 a3, l0
7814; GENERIC-NEXT:    cmplt16 a0, a3
7815; GENERIC-NEXT:    mvcv16 a0
7816; GENERIC-NEXT:    movi16 a3, 1
7817; GENERIC-NEXT:    subu16 a3, a0
7818; GENERIC-NEXT:    btsti16 a3, 0
7819; GENERIC-NEXT:    bt16 .LBB190_2
7820; GENERIC-NEXT:  # %bb.1: # %entry
7821; GENERIC-NEXT:    mov16 a2, a1
7822; GENERIC-NEXT:  .LBB190_2: # %entry
7823; GENERIC-NEXT:    mov16 a0, a2
7824; GENERIC-NEXT:    addi16 sp, sp, 4
7825; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7826; GENERIC-NEXT:    addi16 sp, sp, 4
7827; GENERIC-NEXT:    rts16
7828entry:
7829  %icmp = icmp sle i16 %x, 47777777
7830  %ret = select i1 %icmp, i16 %m, i16 %n
7831  ret i16 %ret
7832}
7833
7834define i16 @selectC_sle_i16(i1 %c, i16 %n, i16 %m) {
7835; CHECK-LABEL: selectC_sle_i16:
7836; CHECK:       # %bb.0: # %entry
7837; CHECK-NEXT:    btsti32 a0, 0
7838; CHECK-NEXT:    movt32 a1, a2
7839; CHECK-NEXT:    mov16 a0, a1
7840; CHECK-NEXT:    rts16
7841;
7842; GENERIC-LABEL: selectC_sle_i16:
7843; GENERIC:       # %bb.0: # %entry
7844; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7845; GENERIC-NEXT:    subi16 sp, sp, 4
7846; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7847; GENERIC-NEXT:    btsti16 a0, 0
7848; GENERIC-NEXT:    bt16 .LBB191_2
7849; GENERIC-NEXT:  # %bb.1: # %entry
7850; GENERIC-NEXT:    mov16 a2, a1
7851; GENERIC-NEXT:  .LBB191_2: # %entry
7852; GENERIC-NEXT:    mov16 a0, a2
7853; GENERIC-NEXT:    addi16 sp, sp, 4
7854; GENERIC-NEXT:    rts16
7855entry:
7856  %ret = select i1 %c, i16 %m, i16 %n
7857  ret i16 %ret
7858}
7859
7860
7861define i8 @selectRR_sle_i8(i8 %x, i8 %y, i8 %n, i8 %m) {
7862; CHECK-LABEL: selectRR_sle_i8:
7863; CHECK:       # %bb.0: # %entry
7864; CHECK-NEXT:    sextb16 a1, a1
7865; CHECK-NEXT:    sextb16 a0, a0
7866; CHECK-NEXT:    cmplt16 a0, a1
7867; CHECK-NEXT:    movf32 a2, a3
7868; CHECK-NEXT:    mov16 a0, a2
7869; CHECK-NEXT:    rts16
7870;
7871; GENERIC-LABEL: selectRR_sle_i8:
7872; GENERIC:       # %bb.0: # %entry
7873; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7874; GENERIC-NEXT:    subi16 sp, sp, 4
7875; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7876; GENERIC-NEXT:    sextb16 a1, a1
7877; GENERIC-NEXT:    sextb16 a0, a0
7878; GENERIC-NEXT:    cmplt16 a0, a1
7879; GENERIC-NEXT:    mvcv16 a0
7880; GENERIC-NEXT:    btsti16 a0, 0
7881; GENERIC-NEXT:    bt16 .LBB192_2
7882; GENERIC-NEXT:  # %bb.1: # %entry
7883; GENERIC-NEXT:    mov16 a3, a2
7884; GENERIC-NEXT:  .LBB192_2: # %entry
7885; GENERIC-NEXT:    mov16 a0, a3
7886; GENERIC-NEXT:    addi16 sp, sp, 4
7887; GENERIC-NEXT:    rts16
7888entry:
7889  %icmp = icmp sle i8 %y, %x
7890  %ret = select i1 %icmp, i8 %m, i8 %n
7891  ret i8 %ret
7892}
7893
7894define i8 @selectRI_sle_i8(i8 %x, i8 %n, i8 %m) {
7895; CHECK-LABEL: selectRI_sle_i8:
7896; CHECK:       # %bb.0: # %entry
7897; CHECK-NEXT:    sextb16 a0, a0
7898; CHECK-NEXT:    cmplti16 a0, 11
7899; CHECK-NEXT:    movt32 a1, a2
7900; CHECK-NEXT:    mov16 a0, a1
7901; CHECK-NEXT:    rts16
7902;
7903; GENERIC-LABEL: selectRI_sle_i8:
7904; GENERIC:       # %bb.0: # %entry
7905; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7906; GENERIC-NEXT:    subi16 sp, sp, 4
7907; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7908; GENERIC-NEXT:    sextb16 a0, a0
7909; GENERIC-NEXT:    cmplti16 a0, 11
7910; GENERIC-NEXT:    mvcv16 a0
7911; GENERIC-NEXT:    movi16 a3, 1
7912; GENERIC-NEXT:    subu16 a3, a0
7913; GENERIC-NEXT:    btsti16 a3, 0
7914; GENERIC-NEXT:    bt16 .LBB193_2
7915; GENERIC-NEXT:  # %bb.1: # %entry
7916; GENERIC-NEXT:    mov16 a2, a1
7917; GENERIC-NEXT:  .LBB193_2: # %entry
7918; GENERIC-NEXT:    mov16 a0, a2
7919; GENERIC-NEXT:    addi16 sp, sp, 4
7920; GENERIC-NEXT:    rts16
7921entry:
7922  %icmp = icmp sle i8 %x, 10
7923  %ret = select i1 %icmp, i8 %m, i8 %n
7924  ret i8 %ret
7925}
7926
7927define i8 @selectRX_sle_i8(i8 %x, i8 %n, i8 %m) {
7928; CHECK-LABEL: selectRX_sle_i8:
7929; CHECK:       # %bb.0: # %entry
7930; CHECK-NEXT:    sextb16 a0, a0
7931; CHECK-NEXT:    movih32 a3, 65535
7932; CHECK-NEXT:    ori32 a3, a3, 65522
7933; CHECK-NEXT:    cmplt16 a0, a3
7934; CHECK-NEXT:    movt32 a1, a2
7935; CHECK-NEXT:    mov16 a0, a1
7936; CHECK-NEXT:    rts16
7937;
7938; GENERIC-LABEL: selectRX_sle_i8:
7939; GENERIC:       # %bb.0: # %entry
7940; GENERIC-NEXT:    subi16 sp, sp, 8
7941; GENERIC-NEXT:    .cfi_def_cfa_offset 8
7942; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
7943; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
7944; GENERIC-NEXT:    .cfi_offset l1, -4
7945; GENERIC-NEXT:    .cfi_offset l0, -8
7946; GENERIC-NEXT:    subi16 sp, sp, 4
7947; GENERIC-NEXT:    .cfi_def_cfa_offset 12
7948; GENERIC-NEXT:    sextb16 a0, a0
7949; GENERIC-NEXT:    movi16 a3, 255
7950; GENERIC-NEXT:    lsli16 l0, a3, 24
7951; GENERIC-NEXT:    lsli16 l1, a3, 16
7952; GENERIC-NEXT:    or16 l1, l0
7953; GENERIC-NEXT:    lsli16 a3, a3, 8
7954; GENERIC-NEXT:    or16 a3, l1
7955; GENERIC-NEXT:    movi16 l0, 242
7956; GENERIC-NEXT:    or16 l0, a3
7957; GENERIC-NEXT:    cmplt16 a0, l0
7958; GENERIC-NEXT:    mvcv16 a0
7959; GENERIC-NEXT:    movi16 a3, 1
7960; GENERIC-NEXT:    subu16 a3, a0
7961; GENERIC-NEXT:    btsti16 a3, 0
7962; GENERIC-NEXT:    bt16 .LBB194_2
7963; GENERIC-NEXT:  # %bb.1: # %entry
7964; GENERIC-NEXT:    mov16 a2, a1
7965; GENERIC-NEXT:  .LBB194_2: # %entry
7966; GENERIC-NEXT:    mov16 a0, a2
7967; GENERIC-NEXT:    addi16 sp, sp, 4
7968; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
7969; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
7970; GENERIC-NEXT:    addi16 sp, sp, 8
7971; GENERIC-NEXT:    rts16
7972entry:
7973  %icmp = icmp sle i8 %x, 47777777
7974  %ret = select i1 %icmp, i8 %m, i8 %n
7975  ret i8 %ret
7976}
7977
7978define i8 @selectC_sle_i8(i1 %c, i8 %n, i8 %m) {
7979; CHECK-LABEL: selectC_sle_i8:
7980; CHECK:       # %bb.0: # %entry
7981; CHECK-NEXT:    btsti32 a0, 0
7982; CHECK-NEXT:    movt32 a1, a2
7983; CHECK-NEXT:    mov16 a0, a1
7984; CHECK-NEXT:    rts16
7985;
7986; GENERIC-LABEL: selectC_sle_i8:
7987; GENERIC:       # %bb.0: # %entry
7988; GENERIC-NEXT:    .cfi_def_cfa_offset 0
7989; GENERIC-NEXT:    subi16 sp, sp, 4
7990; GENERIC-NEXT:    .cfi_def_cfa_offset 4
7991; GENERIC-NEXT:    btsti16 a0, 0
7992; GENERIC-NEXT:    bt16 .LBB195_2
7993; GENERIC-NEXT:  # %bb.1: # %entry
7994; GENERIC-NEXT:    mov16 a2, a1
7995; GENERIC-NEXT:  .LBB195_2: # %entry
7996; GENERIC-NEXT:    mov16 a0, a2
7997; GENERIC-NEXT:    addi16 sp, sp, 4
7998; GENERIC-NEXT:    rts16
7999entry:
8000  %ret = select i1 %c, i8 %m, i8 %n
8001  ret i8 %ret
8002}
8003
8004
8005define i1 @selectRR_sle_i1(i1 %x, i1 %y, i1 %n, i1 %m) {
8006; CHECK-LABEL: selectRR_sle_i1:
8007; CHECK:       # %bb.0: # %entry
8008; CHECK-NEXT:    btsti32 a0, 0
8009; CHECK-NEXT:    mov16 a0, a3
8010; CHECK-NEXT:    movt32 a0, a2
8011; CHECK-NEXT:    btsti32 a1, 0
8012; CHECK-NEXT:    movt32 a0, a3
8013; CHECK-NEXT:    rts16
8014;
8015; GENERIC-LABEL: selectRR_sle_i1:
8016; GENERIC:       # %bb.0: # %entry
8017; GENERIC-NEXT:    .cfi_def_cfa_offset 0
8018; GENERIC-NEXT:    subi16 sp, sp, 4
8019; GENERIC-NEXT:    .cfi_def_cfa_offset 4
8020; GENERIC-NEXT:    btsti16 a0, 0
8021; GENERIC-NEXT:    bt16 .LBB196_2
8022; GENERIC-NEXT:  # %bb.1: # %entry
8023; GENERIC-NEXT:    mov16 a2, a3
8024; GENERIC-NEXT:  .LBB196_2: # %entry
8025; GENERIC-NEXT:    btsti16 a1, 0
8026; GENERIC-NEXT:    bt16 .LBB196_4
8027; GENERIC-NEXT:  # %bb.3: # %entry
8028; GENERIC-NEXT:    mov16 a3, a2
8029; GENERIC-NEXT:  .LBB196_4: # %entry
8030; GENERIC-NEXT:    mov16 a0, a3
8031; GENERIC-NEXT:    addi16 sp, sp, 4
8032; GENERIC-NEXT:    rts16
8033entry:
8034  %icmp = icmp sle i1 %y, %x
8035  %ret = select i1 %icmp, i1 %m, i1 %n
8036  ret i1 %ret
8037}
8038
8039define i1 @selectRI_sle_i1(i1 %x, i1 %n, i1 %m) {
8040; CHECK-LABEL: selectRI_sle_i1:
8041; CHECK:       # %bb.0: # %entry
8042; CHECK-NEXT:    mov16 a0, a2
8043; CHECK-NEXT:    rts16
8044;
8045; GENERIC-LABEL: selectRI_sle_i1:
8046; GENERIC:       # %bb.0: # %entry
8047; GENERIC-NEXT:    .cfi_def_cfa_offset 0
8048; GENERIC-NEXT:    subi16 sp, sp, 4
8049; GENERIC-NEXT:    .cfi_def_cfa_offset 4
8050; GENERIC-NEXT:    mov16 a0, a2
8051; GENERIC-NEXT:    addi16 sp, sp, 4
8052; GENERIC-NEXT:    rts16
8053entry:
8054  %icmp = icmp sle i1 %x, 10
8055  %ret = select i1 %icmp, i1 %m, i1 %n
8056  ret i1 %ret
8057}
8058
8059define i1 @selectRX_sle_i1(i1 %x, i1 %n, i1 %m) {
8060; CHECK-LABEL: selectRX_sle_i1:
8061; CHECK:       # %bb.0: # %entry
8062; CHECK-NEXT:    btsti32 a0, 0
8063; CHECK-NEXT:    movt32 a1, a2
8064; CHECK-NEXT:    mov16 a0, a1
8065; CHECK-NEXT:    rts16
8066;
8067; GENERIC-LABEL: selectRX_sle_i1:
8068; GENERIC:       # %bb.0: # %entry
8069; GENERIC-NEXT:    .cfi_def_cfa_offset 0
8070; GENERIC-NEXT:    subi16 sp, sp, 4
8071; GENERIC-NEXT:    .cfi_def_cfa_offset 4
8072; GENERIC-NEXT:    btsti16 a0, 0
8073; GENERIC-NEXT:    bt16 .LBB198_2
8074; GENERIC-NEXT:  # %bb.1: # %entry
8075; GENERIC-NEXT:    mov16 a2, a1
8076; GENERIC-NEXT:  .LBB198_2: # %entry
8077; GENERIC-NEXT:    mov16 a0, a2
8078; GENERIC-NEXT:    addi16 sp, sp, 4
8079; GENERIC-NEXT:    rts16
8080entry:
8081  %icmp = icmp sle i1 %x, 47777777
8082  %ret = select i1 %icmp, i1 %m, i1 %n
8083  ret i1 %ret
8084}
8085
8086define i1 @selectC_sle_i1(i1 %c, i1 %n, i1 %m) {
8087; CHECK-LABEL: selectC_sle_i1:
8088; CHECK:       # %bb.0: # %entry
8089; CHECK-NEXT:    btsti32 a0, 0
8090; CHECK-NEXT:    movt32 a1, a2
8091; CHECK-NEXT:    mov16 a0, a1
8092; CHECK-NEXT:    rts16
8093;
8094; GENERIC-LABEL: selectC_sle_i1:
8095; GENERIC:       # %bb.0: # %entry
8096; GENERIC-NEXT:    .cfi_def_cfa_offset 0
8097; GENERIC-NEXT:    subi16 sp, sp, 4
8098; GENERIC-NEXT:    .cfi_def_cfa_offset 4
8099; GENERIC-NEXT:    btsti16 a0, 0
8100; GENERIC-NEXT:    bt16 .LBB199_2
8101; GENERIC-NEXT:  # %bb.1: # %entry
8102; GENERIC-NEXT:    mov16 a2, a1
8103; GENERIC-NEXT:  .LBB199_2: # %entry
8104; GENERIC-NEXT:    mov16 a0, a2
8105; GENERIC-NEXT:    addi16 sp, sp, 4
8106; GENERIC-NEXT:    rts16
8107entry:
8108  %ret = select i1 %c, i1 %m, i1 %n
8109  ret i1 %ret
8110}
8111