xref: /llvm-project/llvm/test/CodeGen/CSKY/cmp-i.ll (revision 7b3bbd83c0c24087072ec5b22a76799ab31f87d5)
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  | FileCheck %s --check-prefix=GENERIC
4
5;eq
6define i1 @icmpRR_eq(i32 %x, i32 %y) {
7; CHECK-LABEL: icmpRR_eq:
8; CHECK:       # %bb.0: # %entry
9; CHECK-NEXT:    cmpne16 a1, a0
10; CHECK-NEXT:    mvcv16 a0
11; CHECK-NEXT:    rts16
12;
13; GENERIC-LABEL: icmpRR_eq:
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:    addi16 sp, sp, 4
21; GENERIC-NEXT:    rts16
22entry:
23  %icmp = icmp eq i32 %y, %x
24  ret i1 %icmp
25}
26
27define i1 @icmpRI_eq(i32 %x) {
28; CHECK-LABEL: icmpRI_eq:
29; CHECK:       # %bb.0: # %entry
30; CHECK-NEXT:    cmpnei16 a0, 10
31; CHECK-NEXT:    mvcv16 a0
32; CHECK-NEXT:    rts16
33;
34; GENERIC-LABEL: icmpRI_eq:
35; GENERIC:       # %bb.0: # %entry
36; GENERIC-NEXT:    .cfi_def_cfa_offset 0
37; GENERIC-NEXT:    subi16 sp, sp, 4
38; GENERIC-NEXT:    .cfi_def_cfa_offset 4
39; GENERIC-NEXT:    cmpnei16 a0, 10
40; GENERIC-NEXT:    mvcv16 a0
41; GENERIC-NEXT:    addi16 sp, sp, 4
42; GENERIC-NEXT:    rts16
43entry:
44  %icmp = icmp eq i32 %x, 10
45  ret i1 %icmp
46}
47
48define i1 @icmpRI_X_eq(i32 %x) {
49; CHECK-LABEL: icmpRI_X_eq:
50; CHECK:       # %bb.0: # %entry
51; CHECK-NEXT:    movih32 a1, 62
52; CHECK-NEXT:    ori32 a1, a1, 33768
53; CHECK-NEXT:    cmpne16 a0, a1
54; CHECK-NEXT:    mvcv16 a0
55; CHECK-NEXT:    rts16
56;
57; GENERIC-LABEL: icmpRI_X_eq:
58; GENERIC:       # %bb.0: # %entry
59; GENERIC-NEXT:    .cfi_def_cfa_offset 0
60; GENERIC-NEXT:    subi16 sp, sp, 4
61; GENERIC-NEXT:    .cfi_def_cfa_offset 4
62; GENERIC-NEXT:    movi16 a1, 0
63; GENERIC-NEXT:    lsli16 a1, a1, 24
64; GENERIC-NEXT:    movi16 a2, 62
65; GENERIC-NEXT:    lsli16 a2, a2, 16
66; GENERIC-NEXT:    or16 a2, a1
67; GENERIC-NEXT:    movi16 a1, 131
68; GENERIC-NEXT:    lsli16 a1, a1, 8
69; GENERIC-NEXT:    or16 a1, a2
70; GENERIC-NEXT:    movi16 a2, 232
71; GENERIC-NEXT:    or16 a2, a1
72; GENERIC-NEXT:    cmpne16 a0, a2
73; GENERIC-NEXT:    mvcv16 a0
74; GENERIC-NEXT:    addi16 sp, sp, 4
75; GENERIC-NEXT:    rts16
76entry:
77  %icmp = icmp eq i32 %x, 4097000
78  ret i1 %icmp
79}
80
81define i1 @icmpRI_AND_ne(i32 %x) {
82; CHECK-LABEL: icmpRI_AND_ne:
83; CHECK:       # %bb.0: # %entry
84; CHECK-NEXT:    btsti16 a0, 15
85; CHECK-NEXT:    mvc32 a0
86; CHECK-NEXT:    rts16
87;
88; GENERIC-LABEL: icmpRI_AND_ne:
89; GENERIC:       # %bb.0: # %entry
90; GENERIC-NEXT:    .cfi_def_cfa_offset 0
91; GENERIC-NEXT:    subi16 sp, sp, 4
92; GENERIC-NEXT:    .cfi_def_cfa_offset 4
93; GENERIC-NEXT:    movi16 a1, 0
94; GENERIC-NEXT:    lsli16 a2, a1, 24
95; GENERIC-NEXT:    lsli16 a3, a1, 16
96; GENERIC-NEXT:    or16 a3, a2
97; GENERIC-NEXT:    movi16 a2, 128
98; GENERIC-NEXT:    lsli16 a2, a2, 8
99; GENERIC-NEXT:    or16 a2, a3
100; GENERIC-NEXT:    or16 a2, a1
101; GENERIC-NEXT:    and16 a2, a0
102; GENERIC-NEXT:    cmpnei16 a2, 0
103; GENERIC-NEXT:    mvcv16 a1
104; GENERIC-NEXT:    movi16 a0, 1
105; GENERIC-NEXT:    subu16 a0, a1
106; GENERIC-NEXT:    addi16 sp, sp, 4
107; GENERIC-NEXT:    rts16
108entry:
109  %and = and i32 %x, 32768
110  %icmp = icmp ne i32 %and, 0
111  ret i1 %icmp
112}
113
114define i1 @ICMP_LONG_eq(i64 %x, i64 %y) {
115; CHECK-LABEL: ICMP_LONG_eq:
116; CHECK:       # %bb.0: # %entry
117; CHECK-NEXT:    xor16 a1, a3
118; CHECK-NEXT:    xor16 a0, a2
119; CHECK-NEXT:    or16 a0, a1
120; CHECK-NEXT:    cmpnei16 a0, 0
121; CHECK-NEXT:    mvcv16 a0
122; CHECK-NEXT:    rts16
123;
124; GENERIC-LABEL: ICMP_LONG_eq:
125; GENERIC:       # %bb.0: # %entry
126; GENERIC-NEXT:    .cfi_def_cfa_offset 0
127; GENERIC-NEXT:    subi16 sp, sp, 4
128; GENERIC-NEXT:    .cfi_def_cfa_offset 4
129; GENERIC-NEXT:    xor16 a1, a3
130; GENERIC-NEXT:    xor16 a0, a2
131; GENERIC-NEXT:    or16 a0, a1
132; GENERIC-NEXT:    cmpnei16 a0, 0
133; GENERIC-NEXT:    mvcv16 a0
134; GENERIC-NEXT:    addi16 sp, sp, 4
135; GENERIC-NEXT:    rts16
136entry:
137  %icmp = icmp eq i64 %y, %x
138  ret i1 %icmp
139}
140
141define i1 @ICMP_LONG_I_eq(i64 %x) {
142; CHECK-LABEL: ICMP_LONG_I_eq:
143; CHECK:       # %bb.0: # %entry
144; CHECK-NEXT:    xori32 a0, a0, 1
145; CHECK-NEXT:    or16 a0, a1
146; CHECK-NEXT:    cmpnei16 a0, 0
147; CHECK-NEXT:    mvcv16 a0
148; CHECK-NEXT:    rts16
149;
150; GENERIC-LABEL: ICMP_LONG_I_eq:
151; GENERIC:       # %bb.0: # %entry
152; GENERIC-NEXT:    .cfi_def_cfa_offset 0
153; GENERIC-NEXT:    subi16 sp, sp, 4
154; GENERIC-NEXT:    .cfi_def_cfa_offset 4
155; GENERIC-NEXT:    movi16 a2, 1
156; GENERIC-NEXT:    xor16 a2, a0
157; GENERIC-NEXT:    or16 a2, a1
158; GENERIC-NEXT:    cmpnei16 a2, 0
159; GENERIC-NEXT:    mvcv16 a0
160; GENERIC-NEXT:    addi16 sp, sp, 4
161; GENERIC-NEXT:    rts16
162entry:
163  %icmp = icmp eq i64 %x, 1
164  ret i1 %icmp
165}
166
167define i1 @ICMP_SHORT_eq(i16 %x, i16 %y) {
168; CHECK-LABEL: ICMP_SHORT_eq:
169; CHECK:       # %bb.0: # %entry
170; CHECK-NEXT:    zexth16 a0, a0
171; CHECK-NEXT:    zexth16 a1, a1
172; CHECK-NEXT:    cmpne16 a1, a0
173; CHECK-NEXT:    mvcv16 a0
174; CHECK-NEXT:    rts16
175;
176; GENERIC-LABEL: ICMP_SHORT_eq:
177; GENERIC:       # %bb.0: # %entry
178; GENERIC-NEXT:    subi16 sp, sp, 4
179; GENERIC-NEXT:    .cfi_def_cfa_offset 4
180; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
181; GENERIC-NEXT:    .cfi_offset l0, -4
182; GENERIC-NEXT:    subi16 sp, sp, 4
183; GENERIC-NEXT:    .cfi_def_cfa_offset 8
184; GENERIC-NEXT:    movi16 a2, 0
185; GENERIC-NEXT:    lsli16 a3, a2, 24
186; GENERIC-NEXT:    lsli16 a2, a2, 16
187; GENERIC-NEXT:    or16 a2, a3
188; GENERIC-NEXT:    movi16 a3, 255
189; GENERIC-NEXT:    lsli16 l0, a3, 8
190; GENERIC-NEXT:    or16 l0, a2
191; GENERIC-NEXT:    or16 l0, a3
192; GENERIC-NEXT:    and16 a0, l0
193; GENERIC-NEXT:    and16 l0, a1
194; GENERIC-NEXT:    cmpne16 l0, a0
195; GENERIC-NEXT:    mvcv16 a0
196; GENERIC-NEXT:    addi16 sp, sp, 4
197; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
198; GENERIC-NEXT:    addi16 sp, sp, 4
199; GENERIC-NEXT:    rts16
200entry:
201  %icmp = icmp eq i16 %y, %x
202  ret i1 %icmp
203}
204
205define i1 @ICMP_SHORT_I_eq(i16 %x) {
206; CHECK-LABEL: ICMP_SHORT_I_eq:
207; CHECK:       # %bb.0: # %entry
208; CHECK-NEXT:    zexth16 a0, a0
209; CHECK-NEXT:    cmpnei16 a0, 1
210; CHECK-NEXT:    mvcv16 a0
211; CHECK-NEXT:    rts16
212;
213; GENERIC-LABEL: ICMP_SHORT_I_eq:
214; GENERIC:       # %bb.0: # %entry
215; GENERIC-NEXT:    .cfi_def_cfa_offset 0
216; GENERIC-NEXT:    subi16 sp, sp, 4
217; GENERIC-NEXT:    .cfi_def_cfa_offset 4
218; GENERIC-NEXT:    movi16 a1, 0
219; GENERIC-NEXT:    lsli16 a2, a1, 24
220; GENERIC-NEXT:    lsli16 a1, a1, 16
221; GENERIC-NEXT:    or16 a1, a2
222; GENERIC-NEXT:    movi16 a2, 255
223; GENERIC-NEXT:    lsli16 a3, a2, 8
224; GENERIC-NEXT:    or16 a3, a1
225; GENERIC-NEXT:    or16 a3, a2
226; GENERIC-NEXT:    and16 a3, a0
227; GENERIC-NEXT:    cmpnei16 a3, 1
228; GENERIC-NEXT:    mvcv16 a0
229; GENERIC-NEXT:    addi16 sp, sp, 4
230; GENERIC-NEXT:    rts16
231entry:
232  %icmp = icmp eq i16 %x, 1
233  ret i1 %icmp
234}
235
236define i1 @ICMP_CHAR_eq(i8 %x, i8 %y) {
237; CHECK-LABEL: ICMP_CHAR_eq:
238; CHECK:       # %bb.0: # %entry
239; CHECK-NEXT:    zextb16 a0, a0
240; CHECK-NEXT:    zextb16 a1, a1
241; CHECK-NEXT:    cmpne16 a1, a0
242; CHECK-NEXT:    mvcv16 a0
243; CHECK-NEXT:    rts16
244;
245; GENERIC-LABEL: ICMP_CHAR_eq:
246; GENERIC:       # %bb.0: # %entry
247; GENERIC-NEXT:    .cfi_def_cfa_offset 0
248; GENERIC-NEXT:    subi16 sp, sp, 4
249; GENERIC-NEXT:    .cfi_def_cfa_offset 4
250; GENERIC-NEXT:    movi16 a2, 255
251; GENERIC-NEXT:    and16 a0, a2
252; GENERIC-NEXT:    and16 a1, a2
253; GENERIC-NEXT:    cmpne16 a1, a0
254; GENERIC-NEXT:    mvcv16 a0
255; GENERIC-NEXT:    addi16 sp, sp, 4
256; GENERIC-NEXT:    rts16
257entry:
258  %icmp = icmp eq i8 %y, %x
259  ret i1 %icmp
260}
261
262define i1 @ICMP_CHAR_I_eq(i8 %x) {
263; CHECK-LABEL: ICMP_CHAR_I_eq:
264; CHECK:       # %bb.0: # %entry
265; CHECK-NEXT:    zextb16 a0, a0
266; CHECK-NEXT:    cmpnei16 a0, 1
267; CHECK-NEXT:    mvcv16 a0
268; CHECK-NEXT:    rts16
269;
270; GENERIC-LABEL: ICMP_CHAR_I_eq:
271; GENERIC:       # %bb.0: # %entry
272; GENERIC-NEXT:    .cfi_def_cfa_offset 0
273; GENERIC-NEXT:    subi16 sp, sp, 4
274; GENERIC-NEXT:    .cfi_def_cfa_offset 4
275; GENERIC-NEXT:    movi16 a1, 255
276; GENERIC-NEXT:    and16 a1, a0
277; GENERIC-NEXT:    cmpnei16 a1, 1
278; GENERIC-NEXT:    mvcv16 a0
279; GENERIC-NEXT:    addi16 sp, sp, 4
280; GENERIC-NEXT:    rts16
281entry:
282  %icmp = icmp eq i8 %x, 1
283  ret i1 %icmp
284}
285
286define i1 @ICMP_BIT_eq(i1 %x, i1 %y) {
287; CHECK-LABEL: ICMP_BIT_eq:
288; CHECK:       # %bb.0: # %entry
289; CHECK-NEXT:    xor16 a0, a1
290; CHECK-NEXT:    xori32 a0, a0, 1
291; CHECK-NEXT:    rts16
292;
293; GENERIC-LABEL: ICMP_BIT_eq:
294; GENERIC:       # %bb.0: # %entry
295; GENERIC-NEXT:    .cfi_def_cfa_offset 0
296; GENERIC-NEXT:    subi16 sp, sp, 4
297; GENERIC-NEXT:    .cfi_def_cfa_offset 4
298; GENERIC-NEXT:    xor16 a0, a1
299; GENERIC-NEXT:    movi16 a1, 1
300; GENERIC-NEXT:    xor16 a0, a1
301; GENERIC-NEXT:    addi16 sp, sp, 4
302; GENERIC-NEXT:    rts16
303entry:
304  %icmp = icmp eq i1 %y, %x
305  ret i1 %icmp
306}
307
308define i1 @ICMP_BIT_I_eq(i1 %x) {
309; CHECK-LABEL: ICMP_BIT_I_eq:
310; CHECK:       # %bb.0: # %entry
311; CHECK-NEXT:    rts16
312;
313; GENERIC-LABEL: ICMP_BIT_I_eq:
314; GENERIC:       # %bb.0: # %entry
315; GENERIC-NEXT:    .cfi_def_cfa_offset 0
316; GENERIC-NEXT:    subi16 sp, sp, 4
317; GENERIC-NEXT:    .cfi_def_cfa_offset 4
318; GENERIC-NEXT:    addi16 sp, sp, 4
319; GENERIC-NEXT:    rts16
320entry:
321  %icmp = icmp eq i1 %x, 1
322  ret i1 %icmp
323}
324
325;ne
326define i1 @icmpRR_ne(i32 %x, i32 %y) {
327; CHECK-LABEL: icmpRR_ne:
328; CHECK:       # %bb.0: # %entry
329; CHECK-NEXT:    cmpne16 a1, a0
330; CHECK-NEXT:    mvc32 a0
331; CHECK-NEXT:    rts16
332;
333; GENERIC-LABEL: icmpRR_ne:
334; GENERIC:       # %bb.0: # %entry
335; GENERIC-NEXT:    .cfi_def_cfa_offset 0
336; GENERIC-NEXT:    subi16 sp, sp, 4
337; GENERIC-NEXT:    .cfi_def_cfa_offset 4
338; GENERIC-NEXT:    cmpne16 a1, a0
339; GENERIC-NEXT:    mvcv16 a1
340; GENERIC-NEXT:    movi16 a0, 1
341; GENERIC-NEXT:    subu16 a0, a1
342; GENERIC-NEXT:    addi16 sp, sp, 4
343; GENERIC-NEXT:    rts16
344entry:
345  %icmp = icmp ne i32 %y, %x
346  ret i1 %icmp
347}
348
349define i1 @icmpRI_ne(i32 %x) {
350; CHECK-LABEL: icmpRI_ne:
351; CHECK:       # %bb.0: # %entry
352; CHECK-NEXT:    cmpnei16 a0, 10
353; CHECK-NEXT:    mvc32 a0
354; CHECK-NEXT:    rts16
355;
356; GENERIC-LABEL: icmpRI_ne:
357; GENERIC:       # %bb.0: # %entry
358; GENERIC-NEXT:    .cfi_def_cfa_offset 0
359; GENERIC-NEXT:    subi16 sp, sp, 4
360; GENERIC-NEXT:    .cfi_def_cfa_offset 4
361; GENERIC-NEXT:    cmpnei16 a0, 10
362; GENERIC-NEXT:    mvcv16 a1
363; GENERIC-NEXT:    movi16 a0, 1
364; GENERIC-NEXT:    subu16 a0, a1
365; GENERIC-NEXT:    addi16 sp, sp, 4
366; GENERIC-NEXT:    rts16
367entry:
368  %icmp = icmp ne i32 %x, 10
369  ret i1 %icmp
370}
371
372define i1 @icmpRI_X_ne(i32 %x) {
373; CHECK-LABEL: icmpRI_X_ne:
374; CHECK:       # %bb.0: # %entry
375; CHECK-NEXT:    movih32 a1, 62
376; CHECK-NEXT:    ori32 a1, a1, 33768
377; CHECK-NEXT:    cmpne16 a0, a1
378; CHECK-NEXT:    mvc32 a0
379; CHECK-NEXT:    rts16
380;
381; GENERIC-LABEL: icmpRI_X_ne:
382; GENERIC:       # %bb.0: # %entry
383; GENERIC-NEXT:    .cfi_def_cfa_offset 0
384; GENERIC-NEXT:    subi16 sp, sp, 4
385; GENERIC-NEXT:    .cfi_def_cfa_offset 4
386; GENERIC-NEXT:    movi16 a1, 0
387; GENERIC-NEXT:    lsli16 a1, a1, 24
388; GENERIC-NEXT:    movi16 a2, 62
389; GENERIC-NEXT:    lsli16 a2, a2, 16
390; GENERIC-NEXT:    or16 a2, a1
391; GENERIC-NEXT:    movi16 a1, 131
392; GENERIC-NEXT:    lsli16 a1, a1, 8
393; GENERIC-NEXT:    or16 a1, a2
394; GENERIC-NEXT:    movi16 a2, 232
395; GENERIC-NEXT:    or16 a2, a1
396; GENERIC-NEXT:    cmpne16 a0, a2
397; GENERIC-NEXT:    mvcv16 a1
398; GENERIC-NEXT:    movi16 a0, 1
399; GENERIC-NEXT:    subu16 a0, a1
400; GENERIC-NEXT:    addi16 sp, sp, 4
401; GENERIC-NEXT:    rts16
402entry:
403  %icmp = icmp ne i32 %x, 4097000
404  ret i1 %icmp
405}
406
407define i1 @ICMP_LONG_ne(i64 %x, i64 %y) {
408; CHECK-LABEL: ICMP_LONG_ne:
409; CHECK:       # %bb.0: # %entry
410; CHECK-NEXT:    xor16 a1, a3
411; CHECK-NEXT:    xor16 a0, a2
412; CHECK-NEXT:    or16 a0, a1
413; CHECK-NEXT:    cmpnei16 a0, 0
414; CHECK-NEXT:    mvc32 a0
415; CHECK-NEXT:    rts16
416;
417; GENERIC-LABEL: ICMP_LONG_ne:
418; GENERIC:       # %bb.0: # %entry
419; GENERIC-NEXT:    .cfi_def_cfa_offset 0
420; GENERIC-NEXT:    subi16 sp, sp, 4
421; GENERIC-NEXT:    .cfi_def_cfa_offset 4
422; GENERIC-NEXT:    xor16 a1, a3
423; GENERIC-NEXT:    xor16 a0, a2
424; GENERIC-NEXT:    or16 a0, a1
425; GENERIC-NEXT:    cmpnei16 a0, 0
426; GENERIC-NEXT:    mvcv16 a1
427; GENERIC-NEXT:    movi16 a0, 1
428; GENERIC-NEXT:    subu16 a0, a1
429; GENERIC-NEXT:    addi16 sp, sp, 4
430; GENERIC-NEXT:    rts16
431entry:
432  %icmp = icmp ne i64 %y, %x
433  ret i1 %icmp
434}
435
436define i1 @ICMP_LONG_I_ne(i64 %x) {
437; CHECK-LABEL: ICMP_LONG_I_ne:
438; CHECK:       # %bb.0: # %entry
439; CHECK-NEXT:    xori32 a0, a0, 1
440; CHECK-NEXT:    or16 a0, a1
441; CHECK-NEXT:    cmpnei16 a0, 0
442; CHECK-NEXT:    mvc32 a0
443; CHECK-NEXT:    rts16
444;
445; GENERIC-LABEL: ICMP_LONG_I_ne:
446; GENERIC:       # %bb.0: # %entry
447; GENERIC-NEXT:    .cfi_def_cfa_offset 0
448; GENERIC-NEXT:    subi16 sp, sp, 4
449; GENERIC-NEXT:    .cfi_def_cfa_offset 4
450; GENERIC-NEXT:    movi16 a2, 1
451; GENERIC-NEXT:    xor16 a0, a2
452; GENERIC-NEXT:    or16 a0, a1
453; GENERIC-NEXT:    cmpnei16 a0, 0
454; GENERIC-NEXT:    mvcv16 a0
455; GENERIC-NEXT:    subu16 a2, a0
456; GENERIC-NEXT:    mov16 a0, a2
457; GENERIC-NEXT:    addi16 sp, sp, 4
458; GENERIC-NEXT:    rts16
459entry:
460  %icmp = icmp ne i64 %x, 1
461  ret i1 %icmp
462}
463
464define i1 @ICMP_SHORT_ne(i16 %x, i16 %y) {
465; CHECK-LABEL: ICMP_SHORT_ne:
466; CHECK:       # %bb.0: # %entry
467; CHECK-NEXT:    zexth16 a0, a0
468; CHECK-NEXT:    zexth16 a1, a1
469; CHECK-NEXT:    cmpne16 a1, a0
470; CHECK-NEXT:    mvc32 a0
471; CHECK-NEXT:    rts16
472;
473; GENERIC-LABEL: ICMP_SHORT_ne:
474; GENERIC:       # %bb.0: # %entry
475; GENERIC-NEXT:    subi16 sp, sp, 4
476; GENERIC-NEXT:    .cfi_def_cfa_offset 4
477; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
478; GENERIC-NEXT:    .cfi_offset l0, -4
479; GENERIC-NEXT:    subi16 sp, sp, 4
480; GENERIC-NEXT:    .cfi_def_cfa_offset 8
481; GENERIC-NEXT:    movi16 a2, 0
482; GENERIC-NEXT:    lsli16 a3, a2, 24
483; GENERIC-NEXT:    lsli16 a2, a2, 16
484; GENERIC-NEXT:    or16 a2, a3
485; GENERIC-NEXT:    movi16 a3, 255
486; GENERIC-NEXT:    lsli16 l0, a3, 8
487; GENERIC-NEXT:    or16 l0, a2
488; GENERIC-NEXT:    or16 l0, a3
489; GENERIC-NEXT:    and16 a0, l0
490; GENERIC-NEXT:    and16 l0, a1
491; GENERIC-NEXT:    cmpne16 l0, a0
492; GENERIC-NEXT:    mvcv16 a1
493; GENERIC-NEXT:    movi16 a0, 1
494; GENERIC-NEXT:    subu16 a0, a1
495; GENERIC-NEXT:    addi16 sp, sp, 4
496; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
497; GENERIC-NEXT:    addi16 sp, sp, 4
498; GENERIC-NEXT:    rts16
499entry:
500  %icmp = icmp ne i16 %y, %x
501  ret i1 %icmp
502}
503
504define i1 @ICMP_SHORT_I_ne(i16 %x) {
505; CHECK-LABEL: ICMP_SHORT_I_ne:
506; CHECK:       # %bb.0: # %entry
507; CHECK-NEXT:    zexth16 a0, a0
508; CHECK-NEXT:    cmpnei16 a0, 1
509; CHECK-NEXT:    mvc32 a0
510; CHECK-NEXT:    rts16
511;
512; GENERIC-LABEL: ICMP_SHORT_I_ne:
513; GENERIC:       # %bb.0: # %entry
514; GENERIC-NEXT:    .cfi_def_cfa_offset 0
515; GENERIC-NEXT:    subi16 sp, sp, 4
516; GENERIC-NEXT:    .cfi_def_cfa_offset 4
517; GENERIC-NEXT:    movi16 a1, 0
518; GENERIC-NEXT:    lsli16 a2, a1, 24
519; GENERIC-NEXT:    lsli16 a1, a1, 16
520; GENERIC-NEXT:    or16 a1, a2
521; GENERIC-NEXT:    movi16 a2, 255
522; GENERIC-NEXT:    lsli16 a3, a2, 8
523; GENERIC-NEXT:    or16 a3, a1
524; GENERIC-NEXT:    or16 a3, a2
525; GENERIC-NEXT:    and16 a3, a0
526; GENERIC-NEXT:    cmpnei16 a3, 1
527; GENERIC-NEXT:    mvcv16 a1
528; GENERIC-NEXT:    movi16 a0, 1
529; GENERIC-NEXT:    subu16 a0, a1
530; GENERIC-NEXT:    addi16 sp, sp, 4
531; GENERIC-NEXT:    rts16
532entry:
533  %icmp = icmp ne i16 %x, 1
534  ret i1 %icmp
535}
536
537define i1 @ICMP_CHAR_ne(i8 %x, i8 %y) {
538; CHECK-LABEL: ICMP_CHAR_ne:
539; CHECK:       # %bb.0: # %entry
540; CHECK-NEXT:    zextb16 a0, a0
541; CHECK-NEXT:    zextb16 a1, a1
542; CHECK-NEXT:    cmpne16 a1, a0
543; CHECK-NEXT:    mvc32 a0
544; CHECK-NEXT:    rts16
545;
546; GENERIC-LABEL: ICMP_CHAR_ne:
547; GENERIC:       # %bb.0: # %entry
548; GENERIC-NEXT:    .cfi_def_cfa_offset 0
549; GENERIC-NEXT:    subi16 sp, sp, 4
550; GENERIC-NEXT:    .cfi_def_cfa_offset 4
551; GENERIC-NEXT:    movi16 a2, 255
552; GENERIC-NEXT:    and16 a0, a2
553; GENERIC-NEXT:    and16 a1, a2
554; GENERIC-NEXT:    cmpne16 a1, a0
555; GENERIC-NEXT:    mvcv16 a1
556; GENERIC-NEXT:    movi16 a0, 1
557; GENERIC-NEXT:    subu16 a0, a1
558; GENERIC-NEXT:    addi16 sp, sp, 4
559; GENERIC-NEXT:    rts16
560entry:
561  %icmp = icmp ne i8 %y, %x
562  ret i1 %icmp
563}
564
565define i1 @ICMP_CHAR_I_ne(i8 %x) {
566; CHECK-LABEL: ICMP_CHAR_I_ne:
567; CHECK:       # %bb.0: # %entry
568; CHECK-NEXT:    zextb16 a0, a0
569; CHECK-NEXT:    cmpnei16 a0, 1
570; CHECK-NEXT:    mvc32 a0
571; CHECK-NEXT:    rts16
572;
573; GENERIC-LABEL: ICMP_CHAR_I_ne:
574; GENERIC:       # %bb.0: # %entry
575; GENERIC-NEXT:    .cfi_def_cfa_offset 0
576; GENERIC-NEXT:    subi16 sp, sp, 4
577; GENERIC-NEXT:    .cfi_def_cfa_offset 4
578; GENERIC-NEXT:    movi16 a1, 255
579; GENERIC-NEXT:    and16 a1, a0
580; GENERIC-NEXT:    cmpnei16 a1, 1
581; GENERIC-NEXT:    mvcv16 a1
582; GENERIC-NEXT:    movi16 a0, 1
583; GENERIC-NEXT:    subu16 a0, a1
584; GENERIC-NEXT:    addi16 sp, sp, 4
585; GENERIC-NEXT:    rts16
586entry:
587  %icmp = icmp ne i8 %x, 1
588  ret i1 %icmp
589}
590
591define i1 @ICMP_BIT_ne(i1 %x, i1 %y) {
592; CHECK-LABEL: ICMP_BIT_ne:
593; CHECK:       # %bb.0: # %entry
594; CHECK-NEXT:    xor16 a0, a1
595; CHECK-NEXT:    rts16
596;
597; GENERIC-LABEL: ICMP_BIT_ne:
598; GENERIC:       # %bb.0: # %entry
599; GENERIC-NEXT:    .cfi_def_cfa_offset 0
600; GENERIC-NEXT:    subi16 sp, sp, 4
601; GENERIC-NEXT:    .cfi_def_cfa_offset 4
602; GENERIC-NEXT:    xor16 a0, a1
603; GENERIC-NEXT:    addi16 sp, sp, 4
604; GENERIC-NEXT:    rts16
605entry:
606  %icmp = icmp ne i1 %y, %x
607  ret i1 %icmp
608}
609
610define i1 @ICMP_BIT_I_ne(i1 %x) {
611; CHECK-LABEL: ICMP_BIT_I_ne:
612; CHECK:       # %bb.0: # %entry
613; CHECK-NEXT:    xori32 a0, a0, 1
614; CHECK-NEXT:    rts16
615;
616; GENERIC-LABEL: ICMP_BIT_I_ne:
617; GENERIC:       # %bb.0: # %entry
618; GENERIC-NEXT:    .cfi_def_cfa_offset 0
619; GENERIC-NEXT:    subi16 sp, sp, 4
620; GENERIC-NEXT:    .cfi_def_cfa_offset 4
621; GENERIC-NEXT:    movi16 a1, 1
622; GENERIC-NEXT:    xor16 a0, a1
623; GENERIC-NEXT:    addi16 sp, sp, 4
624; GENERIC-NEXT:    rts16
625entry:
626  %icmp = icmp ne i1 %x, 1
627  ret i1 %icmp
628}
629
630
631;ugt
632define i1 @icmpRR_ugt(i32 %x, i32 %y) {
633; CHECK-LABEL: icmpRR_ugt:
634; CHECK:       # %bb.0: # %entry
635; CHECK-NEXT:    cmphs16 a0, a1
636; CHECK-NEXT:    mvcv16 a0
637; CHECK-NEXT:    rts16
638;
639; GENERIC-LABEL: icmpRR_ugt:
640; GENERIC:       # %bb.0: # %entry
641; GENERIC-NEXT:    .cfi_def_cfa_offset 0
642; GENERIC-NEXT:    subi16 sp, sp, 4
643; GENERIC-NEXT:    .cfi_def_cfa_offset 4
644; GENERIC-NEXT:    cmphs16 a0, a1
645; GENERIC-NEXT:    mvcv16 a0
646; GENERIC-NEXT:    addi16 sp, sp, 4
647; GENERIC-NEXT:    rts16
648entry:
649  %icmp = icmp ugt i32 %y, %x
650  ret i1 %icmp
651}
652
653define i1 @icmpRI_ugt(i32 %x) {
654; CHECK-LABEL: icmpRI_ugt:
655; CHECK:       # %bb.0: # %entry
656; CHECK-NEXT:    movi16 a1, 10
657; CHECK-NEXT:    cmphs16 a1, a0
658; CHECK-NEXT:    mvcv16 a0
659; CHECK-NEXT:    rts16
660;
661; GENERIC-LABEL: icmpRI_ugt:
662; GENERIC:       # %bb.0: # %entry
663; GENERIC-NEXT:    .cfi_def_cfa_offset 0
664; GENERIC-NEXT:    subi16 sp, sp, 4
665; GENERIC-NEXT:    .cfi_def_cfa_offset 4
666; GENERIC-NEXT:    movi16 a1, 10
667; GENERIC-NEXT:    cmphs16 a1, a0
668; GENERIC-NEXT:    mvcv16 a0
669; GENERIC-NEXT:    addi16 sp, sp, 4
670; GENERIC-NEXT:    rts16
671entry:
672  %icmp = icmp ugt i32 %x, 10
673  ret i1 %icmp
674}
675
676define i1 @icmpRI_X_ugt(i32 %x) {
677; CHECK-LABEL: icmpRI_X_ugt:
678; CHECK:       # %bb.0: # %entry
679; CHECK-NEXT:    movih32 a1, 62
680; CHECK-NEXT:    ori32 a1, a1, 33768
681; CHECK-NEXT:    cmphs16 a1, a0
682; CHECK-NEXT:    mvcv16 a0
683; CHECK-NEXT:    rts16
684;
685; GENERIC-LABEL: icmpRI_X_ugt:
686; GENERIC:       # %bb.0: # %entry
687; GENERIC-NEXT:    .cfi_def_cfa_offset 0
688; GENERIC-NEXT:    subi16 sp, sp, 4
689; GENERIC-NEXT:    .cfi_def_cfa_offset 4
690; GENERIC-NEXT:    movi16 a1, 0
691; GENERIC-NEXT:    lsli16 a1, a1, 24
692; GENERIC-NEXT:    movi16 a2, 62
693; GENERIC-NEXT:    lsli16 a2, a2, 16
694; GENERIC-NEXT:    or16 a2, a1
695; GENERIC-NEXT:    movi16 a1, 131
696; GENERIC-NEXT:    lsli16 a1, a1, 8
697; GENERIC-NEXT:    or16 a1, a2
698; GENERIC-NEXT:    movi16 a2, 232
699; GENERIC-NEXT:    or16 a2, a1
700; GENERIC-NEXT:    cmphs16 a2, a0
701; GENERIC-NEXT:    mvcv16 a0
702; GENERIC-NEXT:    addi16 sp, sp, 4
703; GENERIC-NEXT:    rts16
704entry:
705  %icmp = icmp ugt i32 %x, 4097000
706  ret i1 %icmp
707}
708
709define i1 @ICMP_LONG_ugt(i64 %x, i64 %y) {
710; CHECK-LABEL: ICMP_LONG_ugt:
711; CHECK:       # %bb.0: # %entry
712; CHECK-NEXT:    .cfi_def_cfa_offset 0
713; CHECK-NEXT:    subi16 sp, sp, 8
714; CHECK-NEXT:    .cfi_def_cfa_offset 8
715; CHECK-NEXT:    cmpne16 a3, a1
716; CHECK-NEXT:    mvc32 t0
717; CHECK-NEXT:    st32.w t0, (sp, 4)
718; CHECK-NEXT:    cmphs16 a1, a3
719; CHECK-NEXT:    mvcv16 a1
720; CHECK-NEXT:    cmphs16 a0, a2
721; CHECK-NEXT:    mvcv16 a0
722; CHECK-NEXT:    ld16.w a2, (sp, 4)
723; CHECK-NEXT:    btsti16 a2, 0
724; CHECK-NEXT:    movf32 a1, a0
725; CHECK-NEXT:    mov16 a0, a1
726; CHECK-NEXT:    addi16 sp, sp, 8
727; CHECK-NEXT:    rts16
728;
729; GENERIC-LABEL: ICMP_LONG_ugt:
730; GENERIC:       # %bb.0: # %entry
731; GENERIC-NEXT:    subi16 sp, sp, 4
732; GENERIC-NEXT:    .cfi_def_cfa_offset 4
733; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
734; GENERIC-NEXT:    .cfi_offset l0, -4
735; GENERIC-NEXT:    subi16 sp, sp, 4
736; GENERIC-NEXT:    .cfi_def_cfa_offset 8
737; GENERIC-NEXT:    cmphs16 a1, a3
738; GENERIC-NEXT:    mvcv16 l0
739; GENERIC-NEXT:    cmphs16 a0, a2
740; GENERIC-NEXT:    mvcv16 a0
741; GENERIC-NEXT:    cmpne16 a3, a1
742; GENERIC-NEXT:    mvcv16 a1
743; GENERIC-NEXT:    btsti16 a1, 0
744; GENERIC-NEXT:    bt16 .LBB26_2
745; GENERIC-NEXT:  # %bb.1: # %entry
746; GENERIC-NEXT:    mov16 a0, l0
747; GENERIC-NEXT:  .LBB26_2: # %entry
748; GENERIC-NEXT:    addi16 sp, sp, 4
749; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
750; GENERIC-NEXT:    addi16 sp, sp, 4
751; GENERIC-NEXT:    rts16
752entry:
753  %icmp = icmp ugt i64 %y, %x
754  ret i1 %icmp
755}
756
757define i1 @ICMP_LONG_I_ugt(i64 %x) {
758; CHECK-LABEL: ICMP_LONG_I_ugt:
759; CHECK:       # %bb.0: # %entry
760; CHECK-NEXT:    movi16 a2, 1
761; CHECK-NEXT:    cmphs16 a2, a0
762; CHECK-NEXT:    mvcv16 a2
763; CHECK-NEXT:    cmpnei16 a1, 0
764; CHECK-NEXT:    mvc32 a0
765; CHECK-NEXT:    movf32 a0, a2
766; CHECK-NEXT:    rts16
767;
768; GENERIC-LABEL: ICMP_LONG_I_ugt:
769; GENERIC:       # %bb.0: # %entry
770; GENERIC-NEXT:    .cfi_def_cfa_offset 0
771; GENERIC-NEXT:    subi16 sp, sp, 4
772; GENERIC-NEXT:    .cfi_def_cfa_offset 4
773; GENERIC-NEXT:    cmpnei16 a1, 0
774; GENERIC-NEXT:    mvcv16 a1
775; GENERIC-NEXT:    movi16 a2, 1
776; GENERIC-NEXT:    cmphs16 a2, a0
777; GENERIC-NEXT:    mvcv16 a0
778; GENERIC-NEXT:    btsti16 a1, 0
779; GENERIC-NEXT:    bt16 .LBB27_2
780; GENERIC-NEXT:  # %bb.1: # %entry
781; GENERIC-NEXT:    subu16 a2, a1
782; GENERIC-NEXT:    mov16 a0, a2
783; GENERIC-NEXT:  .LBB27_2: # %entry
784; GENERIC-NEXT:    addi16 sp, sp, 4
785; GENERIC-NEXT:    rts16
786entry:
787  %icmp = icmp ugt i64 %x, 1
788  ret i1 %icmp
789}
790
791define i1 @ICMP_SHORT_ugt(i16 %x, i16 %y) {
792; CHECK-LABEL: ICMP_SHORT_ugt:
793; CHECK:       # %bb.0: # %entry
794; CHECK-NEXT:    zexth16 a1, a1
795; CHECK-NEXT:    zexth16 a0, a0
796; CHECK-NEXT:    cmphs16 a0, a1
797; CHECK-NEXT:    mvcv16 a0
798; CHECK-NEXT:    rts16
799;
800; GENERIC-LABEL: ICMP_SHORT_ugt:
801; GENERIC:       # %bb.0: # %entry
802; GENERIC-NEXT:    subi16 sp, sp, 4
803; GENERIC-NEXT:    .cfi_def_cfa_offset 4
804; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
805; GENERIC-NEXT:    .cfi_offset l0, -4
806; GENERIC-NEXT:    subi16 sp, sp, 4
807; GENERIC-NEXT:    .cfi_def_cfa_offset 8
808; GENERIC-NEXT:    movi16 a2, 0
809; GENERIC-NEXT:    lsli16 a3, a2, 24
810; GENERIC-NEXT:    lsli16 a2, a2, 16
811; GENERIC-NEXT:    or16 a2, a3
812; GENERIC-NEXT:    movi16 a3, 255
813; GENERIC-NEXT:    lsli16 l0, a3, 8
814; GENERIC-NEXT:    or16 l0, a2
815; GENERIC-NEXT:    or16 l0, a3
816; GENERIC-NEXT:    and16 a1, l0
817; GENERIC-NEXT:    and16 l0, a0
818; GENERIC-NEXT:    cmphs16 l0, a1
819; GENERIC-NEXT:    mvcv16 a0
820; GENERIC-NEXT:    addi16 sp, sp, 4
821; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
822; GENERIC-NEXT:    addi16 sp, sp, 4
823; GENERIC-NEXT:    rts16
824entry:
825  %icmp = icmp ugt i16 %y, %x
826  ret i1 %icmp
827}
828
829define i1 @ICMP_SHORT_I_ugt(i16 %x) {
830; CHECK-LABEL: ICMP_SHORT_I_ugt:
831; CHECK:       # %bb.0: # %entry
832; CHECK-NEXT:    zexth16 a0, a0
833; CHECK-NEXT:    movi16 a1, 1
834; CHECK-NEXT:    cmphs16 a1, a0
835; CHECK-NEXT:    mvcv16 a0
836; CHECK-NEXT:    rts16
837;
838; GENERIC-LABEL: ICMP_SHORT_I_ugt:
839; GENERIC:       # %bb.0: # %entry
840; GENERIC-NEXT:    .cfi_def_cfa_offset 0
841; GENERIC-NEXT:    subi16 sp, sp, 4
842; GENERIC-NEXT:    .cfi_def_cfa_offset 4
843; GENERIC-NEXT:    movi16 a1, 0
844; GENERIC-NEXT:    lsli16 a2, a1, 24
845; GENERIC-NEXT:    lsli16 a1, a1, 16
846; GENERIC-NEXT:    or16 a1, a2
847; GENERIC-NEXT:    movi16 a2, 255
848; GENERIC-NEXT:    lsli16 a3, a2, 8
849; GENERIC-NEXT:    or16 a3, a1
850; GENERIC-NEXT:    or16 a3, a2
851; GENERIC-NEXT:    and16 a3, a0
852; GENERIC-NEXT:    movi16 a0, 1
853; GENERIC-NEXT:    cmphs16 a0, a3
854; GENERIC-NEXT:    mvcv16 a0
855; GENERIC-NEXT:    addi16 sp, sp, 4
856; GENERIC-NEXT:    rts16
857entry:
858  %icmp = icmp ugt i16 %x, 1
859  ret i1 %icmp
860}
861
862define i1 @ICMP_CHAR_ugt(i8 %x, i8 %y) {
863; CHECK-LABEL: ICMP_CHAR_ugt:
864; CHECK:       # %bb.0: # %entry
865; CHECK-NEXT:    zextb16 a1, a1
866; CHECK-NEXT:    zextb16 a0, a0
867; CHECK-NEXT:    cmphs16 a0, a1
868; CHECK-NEXT:    mvcv16 a0
869; CHECK-NEXT:    rts16
870;
871; GENERIC-LABEL: ICMP_CHAR_ugt:
872; GENERIC:       # %bb.0: # %entry
873; GENERIC-NEXT:    .cfi_def_cfa_offset 0
874; GENERIC-NEXT:    subi16 sp, sp, 4
875; GENERIC-NEXT:    .cfi_def_cfa_offset 4
876; GENERIC-NEXT:    movi16 a2, 255
877; GENERIC-NEXT:    and16 a1, a2
878; GENERIC-NEXT:    and16 a0, a2
879; GENERIC-NEXT:    cmphs16 a0, a1
880; GENERIC-NEXT:    mvcv16 a0
881; GENERIC-NEXT:    addi16 sp, sp, 4
882; GENERIC-NEXT:    rts16
883entry:
884  %icmp = icmp ugt i8 %y, %x
885  ret i1 %icmp
886}
887
888define i1 @ICMP_CHAR_I_ugt(i8 %x) {
889; CHECK-LABEL: ICMP_CHAR_I_ugt:
890; CHECK:       # %bb.0: # %entry
891; CHECK-NEXT:    zextb16 a0, a0
892; CHECK-NEXT:    movi16 a1, 1
893; CHECK-NEXT:    cmphs16 a1, a0
894; CHECK-NEXT:    mvcv16 a0
895; CHECK-NEXT:    rts16
896;
897; GENERIC-LABEL: ICMP_CHAR_I_ugt:
898; GENERIC:       # %bb.0: # %entry
899; GENERIC-NEXT:    .cfi_def_cfa_offset 0
900; GENERIC-NEXT:    subi16 sp, sp, 4
901; GENERIC-NEXT:    .cfi_def_cfa_offset 4
902; GENERIC-NEXT:    movi16 a1, 255
903; GENERIC-NEXT:    and16 a1, a0
904; GENERIC-NEXT:    movi16 a0, 1
905; GENERIC-NEXT:    cmphs16 a0, a1
906; GENERIC-NEXT:    mvcv16 a0
907; GENERIC-NEXT:    addi16 sp, sp, 4
908; GENERIC-NEXT:    rts16
909entry:
910  %icmp = icmp ugt i8 %x, 1
911  ret i1 %icmp
912}
913
914define i1 @ICMP_BIT_ugt(i1 %x, i1 %y) {
915; CHECK-LABEL: ICMP_BIT_ugt:
916; CHECK:       # %bb.0: # %entry
917; CHECK-NEXT:    xori32 a0, a0, 1
918; CHECK-NEXT:    and16 a0, a1
919; CHECK-NEXT:    rts16
920;
921; GENERIC-LABEL: ICMP_BIT_ugt:
922; GENERIC:       # %bb.0: # %entry
923; GENERIC-NEXT:    .cfi_def_cfa_offset 0
924; GENERIC-NEXT:    subi16 sp, sp, 4
925; GENERIC-NEXT:    .cfi_def_cfa_offset 4
926; GENERIC-NEXT:    movi16 a2, 1
927; GENERIC-NEXT:    xor16 a0, a2
928; GENERIC-NEXT:    and16 a0, a1
929; GENERIC-NEXT:    addi16 sp, sp, 4
930; GENERIC-NEXT:    rts16
931entry:
932  %icmp = icmp ugt i1 %y, %x
933  ret i1 %icmp
934}
935
936define i1 @ICMP_BIT_I_ugt(i1 %x) {
937; CHECK-LABEL: ICMP_BIT_I_ugt:
938; CHECK:       # %bb.0: # %entry
939; CHECK-NEXT:    movi16 a0, 0
940; CHECK-NEXT:    rts16
941;
942; GENERIC-LABEL: ICMP_BIT_I_ugt:
943; GENERIC:       # %bb.0: # %entry
944; GENERIC-NEXT:    .cfi_def_cfa_offset 0
945; GENERIC-NEXT:    subi16 sp, sp, 4
946; GENERIC-NEXT:    .cfi_def_cfa_offset 4
947; GENERIC-NEXT:    movi16 a0, 0
948; GENERIC-NEXT:    addi16 sp, sp, 4
949; GENERIC-NEXT:    rts16
950entry:
951  %icmp = icmp ugt i1 %x, 1
952  ret i1 %icmp
953}
954
955
956;uge
957define i1 @icmpRR_uge(i32 %x, i32 %y) {
958; CHECK-LABEL: icmpRR_uge:
959; CHECK:       # %bb.0: # %entry
960; CHECK-NEXT:    cmphs16 a1, a0
961; CHECK-NEXT:    mvc32 a0
962; CHECK-NEXT:    rts16
963;
964; GENERIC-LABEL: icmpRR_uge:
965; GENERIC:       # %bb.0: # %entry
966; GENERIC-NEXT:    .cfi_def_cfa_offset 0
967; GENERIC-NEXT:    subi16 sp, sp, 4
968; GENERIC-NEXT:    .cfi_def_cfa_offset 4
969; GENERIC-NEXT:    cmphs16 a1, a0
970; GENERIC-NEXT:    mvcv16 a1
971; GENERIC-NEXT:    movi16 a0, 1
972; GENERIC-NEXT:    subu16 a0, a1
973; GENERIC-NEXT:    addi16 sp, sp, 4
974; GENERIC-NEXT:    rts16
975entry:
976  %icmp = icmp uge i32 %y, %x
977  ret i1 %icmp
978}
979
980define i1 @icmpRI_uge(i32 %x) {
981; CHECK-LABEL: icmpRI_uge:
982; CHECK:       # %bb.0: # %entry
983; CHECK-NEXT:    movi16 a1, 9
984; CHECK-NEXT:    cmphs16 a1, a0
985; CHECK-NEXT:    mvcv16 a0
986; CHECK-NEXT:    rts16
987;
988; GENERIC-LABEL: icmpRI_uge:
989; GENERIC:       # %bb.0: # %entry
990; GENERIC-NEXT:    .cfi_def_cfa_offset 0
991; GENERIC-NEXT:    subi16 sp, sp, 4
992; GENERIC-NEXT:    .cfi_def_cfa_offset 4
993; GENERIC-NEXT:    movi16 a1, 9
994; GENERIC-NEXT:    cmphs16 a1, a0
995; GENERIC-NEXT:    mvcv16 a0
996; GENERIC-NEXT:    addi16 sp, sp, 4
997; GENERIC-NEXT:    rts16
998entry:
999  %icmp = icmp uge i32 %x, 10
1000  ret i1 %icmp
1001}
1002
1003define i1 @icmpRI_X_uge(i32 %x) {
1004; CHECK-LABEL: icmpRI_X_uge:
1005; CHECK:       # %bb.0: # %entry
1006; CHECK-NEXT:    movih32 a1, 62
1007; CHECK-NEXT:    ori32 a1, a1, 33767
1008; CHECK-NEXT:    cmphs16 a1, a0
1009; CHECK-NEXT:    mvcv16 a0
1010; CHECK-NEXT:    rts16
1011;
1012; GENERIC-LABEL: icmpRI_X_uge:
1013; GENERIC:       # %bb.0: # %entry
1014; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1015; GENERIC-NEXT:    subi16 sp, sp, 4
1016; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1017; GENERIC-NEXT:    movi16 a1, 0
1018; GENERIC-NEXT:    lsli16 a1, a1, 24
1019; GENERIC-NEXT:    movi16 a2, 62
1020; GENERIC-NEXT:    lsli16 a2, a2, 16
1021; GENERIC-NEXT:    or16 a2, a1
1022; GENERIC-NEXT:    movi16 a1, 131
1023; GENERIC-NEXT:    lsli16 a1, a1, 8
1024; GENERIC-NEXT:    or16 a1, a2
1025; GENERIC-NEXT:    movi16 a2, 231
1026; GENERIC-NEXT:    or16 a2, a1
1027; GENERIC-NEXT:    cmphs16 a2, a0
1028; GENERIC-NEXT:    mvcv16 a0
1029; GENERIC-NEXT:    addi16 sp, sp, 4
1030; GENERIC-NEXT:    rts16
1031entry:
1032  %icmp = icmp uge i32 %x, 4097000
1033  ret i1 %icmp
1034}
1035
1036define i1 @ICMP_LONG_uge(i64 %x, i64 %y) {
1037; CHECK-LABEL: ICMP_LONG_uge:
1038; CHECK:       # %bb.0: # %entry
1039; CHECK-NEXT:    .cfi_def_cfa_offset 0
1040; CHECK-NEXT:    subi16 sp, sp, 16
1041; CHECK-NEXT:    .cfi_def_cfa_offset 16
1042; CHECK-NEXT:    cmphs16 a3, a1
1043; CHECK-NEXT:    mvc32 t0
1044; CHECK-NEXT:    st32.w t0, (sp, 12)
1045; CHECK-NEXT:    cmphs16 a2, a0
1046; CHECK-NEXT:    mvc32 a0
1047; CHECK-NEXT:    st16.w a0, (sp, 4)
1048; CHECK-NEXT:    cmpne16 a3, a1
1049; CHECK-NEXT:    mvc32 a0
1050; CHECK-NEXT:    st16.w a0, (sp, 8)
1051; CHECK-NEXT:    ld16.w a0, (sp, 4)
1052; CHECK-NEXT:    btsti16 a0, 0
1053; CHECK-NEXT:    mvc32 a1
1054; CHECK-NEXT:    ld16.w a0, (sp, 12)
1055; CHECK-NEXT:    btsti16 a0, 0
1056; CHECK-NEXT:    mvc32 a0
1057; CHECK-NEXT:    ld16.w a2, (sp, 8)
1058; CHECK-NEXT:    btsti16 a2, 0
1059; CHECK-NEXT:    movf32 a0, a1
1060; CHECK-NEXT:    addi16 sp, sp, 16
1061; CHECK-NEXT:    rts16
1062;
1063; GENERIC-LABEL: ICMP_LONG_uge:
1064; GENERIC:       # %bb.0: # %entry
1065; GENERIC-NEXT:    subi16 sp, sp, 8
1066; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1067; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1068; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1069; GENERIC-NEXT:    .cfi_offset l1, -4
1070; GENERIC-NEXT:    .cfi_offset l0, -8
1071; GENERIC-NEXT:    subi16 sp, sp, 4
1072; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1073; GENERIC-NEXT:    mov16 l0, a0
1074; GENERIC-NEXT:    cmphs16 a3, a1
1075; GENERIC-NEXT:    mvcv16 l1
1076; GENERIC-NEXT:    movi16 a0, 1
1077; GENERIC-NEXT:    cmphs16 a2, l0
1078; GENERIC-NEXT:    mvcv16 a2
1079; GENERIC-NEXT:    cmpne16 a3, a1
1080; GENERIC-NEXT:    mvcv16 a1
1081; GENERIC-NEXT:    btsti16 a1, 0
1082; GENERIC-NEXT:    bt16 .LBB37_2
1083; GENERIC-NEXT:  # %bb.1: # %entry
1084; GENERIC-NEXT:    subu16 a0, l1
1085; GENERIC-NEXT:    br32 .LBB37_3
1086; GENERIC-NEXT:  .LBB37_2:
1087; GENERIC-NEXT:    subu16 a0, a2
1088; GENERIC-NEXT:  .LBB37_3: # %entry
1089; GENERIC-NEXT:    addi16 sp, sp, 4
1090; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1091; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1092; GENERIC-NEXT:    addi16 sp, sp, 8
1093; GENERIC-NEXT:    rts16
1094entry:
1095  %icmp = icmp uge i64 %y, %x
1096  ret i1 %icmp
1097}
1098
1099define i1 @ICMP_LONG_I_uge(i64 %x) {
1100; CHECK-LABEL: ICMP_LONG_I_uge:
1101; CHECK:       # %bb.0: # %entry
1102; CHECK-NEXT:    or16 a0, a1
1103; CHECK-NEXT:    cmpnei16 a0, 0
1104; CHECK-NEXT:    mvc32 a0
1105; CHECK-NEXT:    rts16
1106;
1107; GENERIC-LABEL: ICMP_LONG_I_uge:
1108; GENERIC:       # %bb.0: # %entry
1109; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1110; GENERIC-NEXT:    subi16 sp, sp, 4
1111; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1112; GENERIC-NEXT:    or16 a0, a1
1113; GENERIC-NEXT:    cmpnei16 a0, 0
1114; GENERIC-NEXT:    mvcv16 a1
1115; GENERIC-NEXT:    movi16 a0, 1
1116; GENERIC-NEXT:    subu16 a0, a1
1117; GENERIC-NEXT:    addi16 sp, sp, 4
1118; GENERIC-NEXT:    rts16
1119entry:
1120  %icmp = icmp uge i64 %x, 1
1121  ret i1 %icmp
1122}
1123
1124define i1 @ICMP_SHORT_uge(i16 %x, i16 %y) {
1125; CHECK-LABEL: ICMP_SHORT_uge:
1126; CHECK:       # %bb.0: # %entry
1127; CHECK-NEXT:    zexth16 a0, a0
1128; CHECK-NEXT:    zexth16 a1, a1
1129; CHECK-NEXT:    cmphs16 a1, a0
1130; CHECK-NEXT:    mvc32 a0
1131; CHECK-NEXT:    rts16
1132;
1133; GENERIC-LABEL: ICMP_SHORT_uge:
1134; GENERIC:       # %bb.0: # %entry
1135; GENERIC-NEXT:    subi16 sp, sp, 4
1136; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1137; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1138; GENERIC-NEXT:    .cfi_offset l0, -4
1139; GENERIC-NEXT:    subi16 sp, sp, 4
1140; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1141; GENERIC-NEXT:    movi16 a2, 0
1142; GENERIC-NEXT:    lsli16 a3, a2, 24
1143; GENERIC-NEXT:    lsli16 a2, a2, 16
1144; GENERIC-NEXT:    or16 a2, a3
1145; GENERIC-NEXT:    movi16 a3, 255
1146; GENERIC-NEXT:    lsli16 l0, a3, 8
1147; GENERIC-NEXT:    or16 l0, a2
1148; GENERIC-NEXT:    or16 l0, a3
1149; GENERIC-NEXT:    and16 a0, l0
1150; GENERIC-NEXT:    and16 l0, a1
1151; GENERIC-NEXT:    cmphs16 l0, a0
1152; GENERIC-NEXT:    mvcv16 a1
1153; GENERIC-NEXT:    movi16 a0, 1
1154; GENERIC-NEXT:    subu16 a0, a1
1155; GENERIC-NEXT:    addi16 sp, sp, 4
1156; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1157; GENERIC-NEXT:    addi16 sp, sp, 4
1158; GENERIC-NEXT:    rts16
1159entry:
1160  %icmp = icmp uge i16 %y, %x
1161  ret i1 %icmp
1162}
1163
1164define i1 @ICMP_SHORT_I_uge(i16 %x) {
1165; CHECK-LABEL: ICMP_SHORT_I_uge:
1166; CHECK:       # %bb.0: # %entry
1167; CHECK-NEXT:    zexth16 a0, a0
1168; CHECK-NEXT:    cmpnei16 a0, 0
1169; CHECK-NEXT:    mvc32 a0
1170; CHECK-NEXT:    rts16
1171;
1172; GENERIC-LABEL: ICMP_SHORT_I_uge:
1173; GENERIC:       # %bb.0: # %entry
1174; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1175; GENERIC-NEXT:    subi16 sp, sp, 4
1176; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1177; GENERIC-NEXT:    movi16 a1, 0
1178; GENERIC-NEXT:    lsli16 a2, a1, 24
1179; GENERIC-NEXT:    lsli16 a1, a1, 16
1180; GENERIC-NEXT:    or16 a1, a2
1181; GENERIC-NEXT:    movi16 a2, 255
1182; GENERIC-NEXT:    lsli16 a3, a2, 8
1183; GENERIC-NEXT:    or16 a3, a1
1184; GENERIC-NEXT:    or16 a3, a2
1185; GENERIC-NEXT:    and16 a3, a0
1186; GENERIC-NEXT:    cmpnei16 a3, 0
1187; GENERIC-NEXT:    mvcv16 a1
1188; GENERIC-NEXT:    movi16 a0, 1
1189; GENERIC-NEXT:    subu16 a0, a1
1190; GENERIC-NEXT:    addi16 sp, sp, 4
1191; GENERIC-NEXT:    rts16
1192entry:
1193  %icmp = icmp uge i16 %x, 1
1194  ret i1 %icmp
1195}
1196
1197define i1 @ICMP_CHAR_uge(i8 %x, i8 %y) {
1198; CHECK-LABEL: ICMP_CHAR_uge:
1199; CHECK:       # %bb.0: # %entry
1200; CHECK-NEXT:    zextb16 a0, a0
1201; CHECK-NEXT:    zextb16 a1, a1
1202; CHECK-NEXT:    cmphs16 a1, a0
1203; CHECK-NEXT:    mvc32 a0
1204; CHECK-NEXT:    rts16
1205;
1206; GENERIC-LABEL: ICMP_CHAR_uge:
1207; GENERIC:       # %bb.0: # %entry
1208; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1209; GENERIC-NEXT:    subi16 sp, sp, 4
1210; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1211; GENERIC-NEXT:    movi16 a2, 255
1212; GENERIC-NEXT:    and16 a0, a2
1213; GENERIC-NEXT:    and16 a1, a2
1214; GENERIC-NEXT:    cmphs16 a1, a0
1215; GENERIC-NEXT:    mvcv16 a1
1216; GENERIC-NEXT:    movi16 a0, 1
1217; GENERIC-NEXT:    subu16 a0, a1
1218; GENERIC-NEXT:    addi16 sp, sp, 4
1219; GENERIC-NEXT:    rts16
1220entry:
1221  %icmp = icmp uge i8 %y, %x
1222  ret i1 %icmp
1223}
1224
1225define i1 @ICMP_CHAR_I_uge(i8 %x) {
1226; CHECK-LABEL: ICMP_CHAR_I_uge:
1227; CHECK:       # %bb.0: # %entry
1228; CHECK-NEXT:    zextb16 a0, a0
1229; CHECK-NEXT:    cmpnei16 a0, 0
1230; CHECK-NEXT:    mvc32 a0
1231; CHECK-NEXT:    rts16
1232;
1233; GENERIC-LABEL: ICMP_CHAR_I_uge:
1234; GENERIC:       # %bb.0: # %entry
1235; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1236; GENERIC-NEXT:    subi16 sp, sp, 4
1237; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1238; GENERIC-NEXT:    movi16 a1, 255
1239; GENERIC-NEXT:    and16 a1, a0
1240; GENERIC-NEXT:    cmpnei16 a1, 0
1241; GENERIC-NEXT:    mvcv16 a1
1242; GENERIC-NEXT:    movi16 a0, 1
1243; GENERIC-NEXT:    subu16 a0, a1
1244; GENERIC-NEXT:    addi16 sp, sp, 4
1245; GENERIC-NEXT:    rts16
1246entry:
1247  %icmp = icmp uge i8 %x, 1
1248  ret i1 %icmp
1249}
1250
1251define i1 @ICMP_BIT_uge(i1 %x, i1 %y) {
1252; CHECK-LABEL: ICMP_BIT_uge:
1253; CHECK:       # %bb.0: # %entry
1254; CHECK-NEXT:    xori32 a0, a0, 1
1255; CHECK-NEXT:    or16 a0, a1
1256; CHECK-NEXT:    rts16
1257;
1258; GENERIC-LABEL: ICMP_BIT_uge:
1259; GENERIC:       # %bb.0: # %entry
1260; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1261; GENERIC-NEXT:    subi16 sp, sp, 4
1262; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1263; GENERIC-NEXT:    movi16 a2, 1
1264; GENERIC-NEXT:    xor16 a0, a2
1265; GENERIC-NEXT:    or16 a0, a1
1266; GENERIC-NEXT:    addi16 sp, sp, 4
1267; GENERIC-NEXT:    rts16
1268entry:
1269  %icmp = icmp uge i1 %y, %x
1270  ret i1 %icmp
1271}
1272
1273define i1 @ICMP_BIT_I_uge(i1 %x) {
1274; CHECK-LABEL: ICMP_BIT_I_uge:
1275; CHECK:       # %bb.0: # %entry
1276; CHECK-NEXT:    rts16
1277;
1278; GENERIC-LABEL: ICMP_BIT_I_uge:
1279; GENERIC:       # %bb.0: # %entry
1280; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1281; GENERIC-NEXT:    subi16 sp, sp, 4
1282; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1283; GENERIC-NEXT:    addi16 sp, sp, 4
1284; GENERIC-NEXT:    rts16
1285entry:
1286  %icmp = icmp uge i1 %x, 1
1287  ret i1 %icmp
1288}
1289
1290
1291;ult
1292define i1 @icmpRR_ult(i32 %x, i32 %y) {
1293; CHECK-LABEL: icmpRR_ult:
1294; CHECK:       # %bb.0: # %entry
1295; CHECK-NEXT:    cmphs16 a1, a0
1296; CHECK-NEXT:    mvcv16 a0
1297; CHECK-NEXT:    rts16
1298;
1299; GENERIC-LABEL: icmpRR_ult:
1300; GENERIC:       # %bb.0: # %entry
1301; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1302; GENERIC-NEXT:    subi16 sp, sp, 4
1303; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1304; GENERIC-NEXT:    cmphs16 a1, a0
1305; GENERIC-NEXT:    mvcv16 a0
1306; GENERIC-NEXT:    addi16 sp, sp, 4
1307; GENERIC-NEXT:    rts16
1308entry:
1309  %icmp = icmp ult i32 %y, %x
1310  ret i1 %icmp
1311}
1312
1313define i1 @icmpRI_ult(i32 %x) {
1314; CHECK-LABEL: icmpRI_ult:
1315; CHECK:       # %bb.0: # %entry
1316; CHECK-NEXT:    cmphsi16 a0, 10
1317; CHECK-NEXT:    mvcv16 a0
1318; CHECK-NEXT:    rts16
1319;
1320; GENERIC-LABEL: icmpRI_ult:
1321; GENERIC:       # %bb.0: # %entry
1322; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1323; GENERIC-NEXT:    subi16 sp, sp, 4
1324; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1325; GENERIC-NEXT:    cmphsi16 a0, 10
1326; GENERIC-NEXT:    mvcv16 a0
1327; GENERIC-NEXT:    addi16 sp, sp, 4
1328; GENERIC-NEXT:    rts16
1329entry:
1330  %icmp = icmp ult i32 %x, 10
1331  ret i1 %icmp
1332}
1333
1334define i1 @icmpRI_X_ult(i32 %x) {
1335; CHECK-LABEL: icmpRI_X_ult:
1336; CHECK:       # %bb.0: # %entry
1337; CHECK-NEXT:    movih32 a1, 62
1338; CHECK-NEXT:    ori32 a1, a1, 33768
1339; CHECK-NEXT:    cmphs16 a0, a1
1340; CHECK-NEXT:    mvcv16 a0
1341; CHECK-NEXT:    rts16
1342;
1343; GENERIC-LABEL: icmpRI_X_ult:
1344; GENERIC:       # %bb.0: # %entry
1345; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1346; GENERIC-NEXT:    subi16 sp, sp, 4
1347; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1348; GENERIC-NEXT:    movi16 a1, 0
1349; GENERIC-NEXT:    lsli16 a1, a1, 24
1350; GENERIC-NEXT:    movi16 a2, 62
1351; GENERIC-NEXT:    lsli16 a2, a2, 16
1352; GENERIC-NEXT:    or16 a2, a1
1353; GENERIC-NEXT:    movi16 a1, 131
1354; GENERIC-NEXT:    lsli16 a1, a1, 8
1355; GENERIC-NEXT:    or16 a1, a2
1356; GENERIC-NEXT:    movi16 a2, 232
1357; GENERIC-NEXT:    or16 a2, a1
1358; GENERIC-NEXT:    cmphs16 a0, a2
1359; GENERIC-NEXT:    mvcv16 a0
1360; GENERIC-NEXT:    addi16 sp, sp, 4
1361; GENERIC-NEXT:    rts16
1362entry:
1363  %icmp = icmp ult i32 %x, 4097000
1364  ret i1 %icmp
1365}
1366
1367define i1 @ICMP_LONG_ult(i64 %x, i64 %y) {
1368; CHECK-LABEL: ICMP_LONG_ult:
1369; CHECK:       # %bb.0: # %entry
1370; CHECK-NEXT:    .cfi_def_cfa_offset 0
1371; CHECK-NEXT:    subi16 sp, sp, 8
1372; CHECK-NEXT:    .cfi_def_cfa_offset 8
1373; CHECK-NEXT:    cmpne16 a3, a1
1374; CHECK-NEXT:    mvc32 t0
1375; CHECK-NEXT:    st32.w t0, (sp, 4)
1376; CHECK-NEXT:    cmphs16 a3, a1
1377; CHECK-NEXT:    mvcv16 a1
1378; CHECK-NEXT:    cmphs16 a2, a0
1379; CHECK-NEXT:    mvcv16 a0
1380; CHECK-NEXT:    ld16.w a2, (sp, 4)
1381; CHECK-NEXT:    btsti16 a2, 0
1382; CHECK-NEXT:    movf32 a1, a0
1383; CHECK-NEXT:    mov16 a0, a1
1384; CHECK-NEXT:    addi16 sp, sp, 8
1385; CHECK-NEXT:    rts16
1386;
1387; GENERIC-LABEL: ICMP_LONG_ult:
1388; GENERIC:       # %bb.0: # %entry
1389; GENERIC-NEXT:    subi16 sp, sp, 4
1390; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1391; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1392; GENERIC-NEXT:    .cfi_offset l0, -4
1393; GENERIC-NEXT:    subi16 sp, sp, 4
1394; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1395; GENERIC-NEXT:    cmphs16 a3, a1
1396; GENERIC-NEXT:    mvcv16 l0
1397; GENERIC-NEXT:    cmphs16 a2, a0
1398; GENERIC-NEXT:    mvcv16 a0
1399; GENERIC-NEXT:    cmpne16 a3, a1
1400; GENERIC-NEXT:    mvcv16 a1
1401; GENERIC-NEXT:    btsti16 a1, 0
1402; GENERIC-NEXT:    bt16 .LBB48_2
1403; GENERIC-NEXT:  # %bb.1: # %entry
1404; GENERIC-NEXT:    mov16 a0, l0
1405; GENERIC-NEXT:  .LBB48_2: # %entry
1406; GENERIC-NEXT:    addi16 sp, sp, 4
1407; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1408; GENERIC-NEXT:    addi16 sp, sp, 4
1409; GENERIC-NEXT:    rts16
1410entry:
1411  %icmp = icmp ult i64 %y, %x
1412  ret i1 %icmp
1413}
1414
1415define i1 @ICMP_LONG_I_ult(i64 %x) {
1416; CHECK-LABEL: ICMP_LONG_I_ult:
1417; CHECK:       # %bb.0: # %entry
1418; CHECK-NEXT:    or16 a0, a1
1419; CHECK-NEXT:    cmpnei16 a0, 0
1420; CHECK-NEXT:    mvcv16 a0
1421; CHECK-NEXT:    rts16
1422;
1423; GENERIC-LABEL: ICMP_LONG_I_ult:
1424; GENERIC:       # %bb.0: # %entry
1425; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1426; GENERIC-NEXT:    subi16 sp, sp, 4
1427; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1428; GENERIC-NEXT:    or16 a0, a1
1429; GENERIC-NEXT:    cmpnei16 a0, 0
1430; GENERIC-NEXT:    mvcv16 a0
1431; GENERIC-NEXT:    addi16 sp, sp, 4
1432; GENERIC-NEXT:    rts16
1433entry:
1434  %icmp = icmp ult i64 %x, 1
1435  ret i1 %icmp
1436}
1437
1438define i1 @ICMP_SHORT_ult(i16 %x, i16 %y) {
1439; CHECK-LABEL: ICMP_SHORT_ult:
1440; CHECK:       # %bb.0: # %entry
1441; CHECK-NEXT:    zexth16 a0, a0
1442; CHECK-NEXT:    zexth16 a1, a1
1443; CHECK-NEXT:    cmphs16 a1, a0
1444; CHECK-NEXT:    mvcv16 a0
1445; CHECK-NEXT:    rts16
1446;
1447; GENERIC-LABEL: ICMP_SHORT_ult:
1448; GENERIC:       # %bb.0: # %entry
1449; GENERIC-NEXT:    subi16 sp, sp, 4
1450; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1451; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1452; GENERIC-NEXT:    .cfi_offset l0, -4
1453; GENERIC-NEXT:    subi16 sp, sp, 4
1454; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1455; GENERIC-NEXT:    movi16 a2, 0
1456; GENERIC-NEXT:    lsli16 a3, a2, 24
1457; GENERIC-NEXT:    lsli16 a2, a2, 16
1458; GENERIC-NEXT:    or16 a2, a3
1459; GENERIC-NEXT:    movi16 a3, 255
1460; GENERIC-NEXT:    lsli16 l0, a3, 8
1461; GENERIC-NEXT:    or16 l0, a2
1462; GENERIC-NEXT:    or16 l0, a3
1463; GENERIC-NEXT:    and16 a0, l0
1464; GENERIC-NEXT:    and16 l0, a1
1465; GENERIC-NEXT:    cmphs16 l0, a0
1466; GENERIC-NEXT:    mvcv16 a0
1467; GENERIC-NEXT:    addi16 sp, sp, 4
1468; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1469; GENERIC-NEXT:    addi16 sp, sp, 4
1470; GENERIC-NEXT:    rts16
1471entry:
1472  %icmp = icmp ult i16 %y, %x
1473  ret i1 %icmp
1474}
1475
1476define i1 @ICMP_SHORT_I_ult(i16 %x) {
1477; CHECK-LABEL: ICMP_SHORT_I_ult:
1478; CHECK:       # %bb.0: # %entry
1479; CHECK-NEXT:    zexth16 a0, a0
1480; CHECK-NEXT:    cmpnei16 a0, 0
1481; CHECK-NEXT:    mvcv16 a0
1482; CHECK-NEXT:    rts16
1483;
1484; GENERIC-LABEL: ICMP_SHORT_I_ult:
1485; GENERIC:       # %bb.0: # %entry
1486; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1487; GENERIC-NEXT:    subi16 sp, sp, 4
1488; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1489; GENERIC-NEXT:    movi16 a1, 0
1490; GENERIC-NEXT:    lsli16 a2, a1, 24
1491; GENERIC-NEXT:    lsli16 a1, a1, 16
1492; GENERIC-NEXT:    or16 a1, a2
1493; GENERIC-NEXT:    movi16 a2, 255
1494; GENERIC-NEXT:    lsli16 a3, a2, 8
1495; GENERIC-NEXT:    or16 a3, a1
1496; GENERIC-NEXT:    or16 a3, a2
1497; GENERIC-NEXT:    and16 a3, a0
1498; GENERIC-NEXT:    cmpnei16 a3, 0
1499; GENERIC-NEXT:    mvcv16 a0
1500; GENERIC-NEXT:    addi16 sp, sp, 4
1501; GENERIC-NEXT:    rts16
1502entry:
1503  %icmp = icmp ult i16 %x, 1
1504  ret i1 %icmp
1505}
1506
1507define i1 @ICMP_CHAR_ult(i8 %x, i8 %y) {
1508; CHECK-LABEL: ICMP_CHAR_ult:
1509; CHECK:       # %bb.0: # %entry
1510; CHECK-NEXT:    zextb16 a0, a0
1511; CHECK-NEXT:    zextb16 a1, a1
1512; CHECK-NEXT:    cmphs16 a1, a0
1513; CHECK-NEXT:    mvcv16 a0
1514; CHECK-NEXT:    rts16
1515;
1516; GENERIC-LABEL: ICMP_CHAR_ult:
1517; GENERIC:       # %bb.0: # %entry
1518; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1519; GENERIC-NEXT:    subi16 sp, sp, 4
1520; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1521; GENERIC-NEXT:    movi16 a2, 255
1522; GENERIC-NEXT:    and16 a0, a2
1523; GENERIC-NEXT:    and16 a1, a2
1524; GENERIC-NEXT:    cmphs16 a1, a0
1525; GENERIC-NEXT:    mvcv16 a0
1526; GENERIC-NEXT:    addi16 sp, sp, 4
1527; GENERIC-NEXT:    rts16
1528entry:
1529  %icmp = icmp ult i8 %y, %x
1530  ret i1 %icmp
1531}
1532
1533define i1 @ICMP_CHAR_I_ult(i8 %x) {
1534; CHECK-LABEL: ICMP_CHAR_I_ult:
1535; CHECK:       # %bb.0: # %entry
1536; CHECK-NEXT:    zextb16 a0, a0
1537; CHECK-NEXT:    cmpnei16 a0, 0
1538; CHECK-NEXT:    mvcv16 a0
1539; CHECK-NEXT:    rts16
1540;
1541; GENERIC-LABEL: ICMP_CHAR_I_ult:
1542; GENERIC:       # %bb.0: # %entry
1543; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1544; GENERIC-NEXT:    subi16 sp, sp, 4
1545; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1546; GENERIC-NEXT:    movi16 a1, 255
1547; GENERIC-NEXT:    and16 a1, a0
1548; GENERIC-NEXT:    cmpnei16 a1, 0
1549; GENERIC-NEXT:    mvcv16 a0
1550; GENERIC-NEXT:    addi16 sp, sp, 4
1551; GENERIC-NEXT:    rts16
1552entry:
1553  %icmp = icmp ult i8 %x, 1
1554  ret i1 %icmp
1555}
1556
1557define i1 @ICMP_BIT_ult(i1 %x, i1 %y) {
1558; CHECK-LABEL: ICMP_BIT_ult:
1559; CHECK:       # %bb.0: # %entry
1560; CHECK-NEXT:    xori32 a1, a1, 1
1561; CHECK-NEXT:    and16 a0, a1
1562; CHECK-NEXT:    rts16
1563;
1564; GENERIC-LABEL: ICMP_BIT_ult:
1565; GENERIC:       # %bb.0: # %entry
1566; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1567; GENERIC-NEXT:    subi16 sp, sp, 4
1568; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1569; GENERIC-NEXT:    movi16 a2, 1
1570; GENERIC-NEXT:    xor16 a2, a1
1571; GENERIC-NEXT:    and16 a0, a2
1572; GENERIC-NEXT:    addi16 sp, sp, 4
1573; GENERIC-NEXT:    rts16
1574entry:
1575  %icmp = icmp ult i1 %y, %x
1576  ret i1 %icmp
1577}
1578
1579define i1 @ICMP_BIT_I_ult(i1 %x) {
1580; CHECK-LABEL: ICMP_BIT_I_ult:
1581; CHECK:       # %bb.0: # %entry
1582; CHECK-NEXT:    xori32 a0, a0, 1
1583; CHECK-NEXT:    rts16
1584;
1585; GENERIC-LABEL: ICMP_BIT_I_ult:
1586; GENERIC:       # %bb.0: # %entry
1587; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1588; GENERIC-NEXT:    subi16 sp, sp, 4
1589; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1590; GENERIC-NEXT:    movi16 a1, 1
1591; GENERIC-NEXT:    xor16 a0, a1
1592; GENERIC-NEXT:    addi16 sp, sp, 4
1593; GENERIC-NEXT:    rts16
1594entry:
1595  %icmp = icmp ult i1 %x, 1
1596  ret i1 %icmp
1597}
1598
1599
1600;ule
1601define i1 @icmpRR_ule(i32 %x, i32 %y) {
1602; CHECK-LABEL: icmpRR_ule:
1603; CHECK:       # %bb.0: # %entry
1604; CHECK-NEXT:    cmphs16 a0, a1
1605; CHECK-NEXT:    mvc32 a0
1606; CHECK-NEXT:    rts16
1607;
1608; GENERIC-LABEL: icmpRR_ule:
1609; GENERIC:       # %bb.0: # %entry
1610; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1611; GENERIC-NEXT:    subi16 sp, sp, 4
1612; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1613; GENERIC-NEXT:    cmphs16 a0, a1
1614; GENERIC-NEXT:    mvcv16 a1
1615; GENERIC-NEXT:    movi16 a0, 1
1616; GENERIC-NEXT:    subu16 a0, a1
1617; GENERIC-NEXT:    addi16 sp, sp, 4
1618; GENERIC-NEXT:    rts16
1619entry:
1620  %icmp = icmp ule i32 %y, %x
1621  ret i1 %icmp
1622}
1623
1624define i1 @icmpRI_ule(i32 %x) {
1625; CHECK-LABEL: icmpRI_ule:
1626; CHECK:       # %bb.0: # %entry
1627; CHECK-NEXT:    cmphsi16 a0, 11
1628; CHECK-NEXT:    mvcv16 a0
1629; CHECK-NEXT:    rts16
1630;
1631; GENERIC-LABEL: icmpRI_ule:
1632; GENERIC:       # %bb.0: # %entry
1633; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1634; GENERIC-NEXT:    subi16 sp, sp, 4
1635; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1636; GENERIC-NEXT:    cmphsi16 a0, 11
1637; GENERIC-NEXT:    mvcv16 a0
1638; GENERIC-NEXT:    addi16 sp, sp, 4
1639; GENERIC-NEXT:    rts16
1640entry:
1641  %icmp = icmp ule i32 %x, 10
1642  ret i1 %icmp
1643}
1644
1645define i1 @icmpRI_X_ule(i32 %x) {
1646; CHECK-LABEL: icmpRI_X_ule:
1647; CHECK:       # %bb.0: # %entry
1648; CHECK-NEXT:    movih32 a1, 62
1649; CHECK-NEXT:    ori32 a1, a1, 33769
1650; CHECK-NEXT:    cmphs16 a0, a1
1651; CHECK-NEXT:    mvcv16 a0
1652; CHECK-NEXT:    rts16
1653;
1654; GENERIC-LABEL: icmpRI_X_ule:
1655; GENERIC:       # %bb.0: # %entry
1656; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1657; GENERIC-NEXT:    subi16 sp, sp, 4
1658; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1659; GENERIC-NEXT:    movi16 a1, 0
1660; GENERIC-NEXT:    lsli16 a1, a1, 24
1661; GENERIC-NEXT:    movi16 a2, 62
1662; GENERIC-NEXT:    lsli16 a2, a2, 16
1663; GENERIC-NEXT:    or16 a2, a1
1664; GENERIC-NEXT:    movi16 a1, 131
1665; GENERIC-NEXT:    lsli16 a1, a1, 8
1666; GENERIC-NEXT:    or16 a1, a2
1667; GENERIC-NEXT:    movi16 a2, 233
1668; GENERIC-NEXT:    or16 a2, a1
1669; GENERIC-NEXT:    cmphs16 a0, a2
1670; GENERIC-NEXT:    mvcv16 a0
1671; GENERIC-NEXT:    addi16 sp, sp, 4
1672; GENERIC-NEXT:    rts16
1673entry:
1674  %icmp = icmp ule i32 %x, 4097000
1675  ret i1 %icmp
1676}
1677
1678define i1 @ICMP_LONG_ule(i64 %x, i64 %y) {
1679; CHECK-LABEL: ICMP_LONG_ule:
1680; CHECK:       # %bb.0: # %entry
1681; CHECK-NEXT:    .cfi_def_cfa_offset 0
1682; CHECK-NEXT:    subi16 sp, sp, 16
1683; CHECK-NEXT:    .cfi_def_cfa_offset 16
1684; CHECK-NEXT:    cmphs16 a1, a3
1685; CHECK-NEXT:    mvc32 t0
1686; CHECK-NEXT:    st32.w t0, (sp, 12)
1687; CHECK-NEXT:    cmphs16 a0, a2
1688; CHECK-NEXT:    mvc32 a0
1689; CHECK-NEXT:    st16.w a0, (sp, 4)
1690; CHECK-NEXT:    cmpne16 a3, a1
1691; CHECK-NEXT:    mvc32 a0
1692; CHECK-NEXT:    st16.w a0, (sp, 8)
1693; CHECK-NEXT:    ld16.w a0, (sp, 4)
1694; CHECK-NEXT:    btsti16 a0, 0
1695; CHECK-NEXT:    mvc32 a1
1696; CHECK-NEXT:    ld16.w a0, (sp, 12)
1697; CHECK-NEXT:    btsti16 a0, 0
1698; CHECK-NEXT:    mvc32 a0
1699; CHECK-NEXT:    ld16.w a2, (sp, 8)
1700; CHECK-NEXT:    btsti16 a2, 0
1701; CHECK-NEXT:    movf32 a0, a1
1702; CHECK-NEXT:    addi16 sp, sp, 16
1703; CHECK-NEXT:    rts16
1704;
1705; GENERIC-LABEL: ICMP_LONG_ule:
1706; GENERIC:       # %bb.0: # %entry
1707; GENERIC-NEXT:    subi16 sp, sp, 8
1708; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1709; GENERIC-NEXT:    st16.w l1, (sp, 4) # 4-byte Folded Spill
1710; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1711; GENERIC-NEXT:    .cfi_offset l1, -4
1712; GENERIC-NEXT:    .cfi_offset l0, -8
1713; GENERIC-NEXT:    subi16 sp, sp, 4
1714; GENERIC-NEXT:    .cfi_def_cfa_offset 12
1715; GENERIC-NEXT:    mov16 l0, a0
1716; GENERIC-NEXT:    cmphs16 a1, a3
1717; GENERIC-NEXT:    mvcv16 l1
1718; GENERIC-NEXT:    movi16 a0, 1
1719; GENERIC-NEXT:    cmphs16 l0, a2
1720; GENERIC-NEXT:    mvcv16 a2
1721; GENERIC-NEXT:    cmpne16 a3, a1
1722; GENERIC-NEXT:    mvcv16 a1
1723; GENERIC-NEXT:    btsti16 a1, 0
1724; GENERIC-NEXT:    bt16 .LBB59_2
1725; GENERIC-NEXT:  # %bb.1: # %entry
1726; GENERIC-NEXT:    subu16 a0, l1
1727; GENERIC-NEXT:    br32 .LBB59_3
1728; GENERIC-NEXT:  .LBB59_2:
1729; GENERIC-NEXT:    subu16 a0, a2
1730; GENERIC-NEXT:  .LBB59_3: # %entry
1731; GENERIC-NEXT:    addi16 sp, sp, 4
1732; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1733; GENERIC-NEXT:    ld16.w l1, (sp, 4) # 4-byte Folded Reload
1734; GENERIC-NEXT:    addi16 sp, sp, 8
1735; GENERIC-NEXT:    rts16
1736entry:
1737  %icmp = icmp ule i64 %y, %x
1738  ret i1 %icmp
1739}
1740
1741define i1 @ICMP_LONG_I_ule(i64 %x) {
1742; CHECK-LABEL: ICMP_LONG_I_ule:
1743; CHECK:       # %bb.0: # %entry
1744; CHECK-NEXT:    .cfi_def_cfa_offset 0
1745; CHECK-NEXT:    subi16 sp, sp, 8
1746; CHECK-NEXT:    .cfi_def_cfa_offset 8
1747; CHECK-NEXT:    cmpnei16 a1, 0
1748; CHECK-NEXT:    mvc32 a1
1749; CHECK-NEXT:    st16.w a1, (sp, 4)
1750; CHECK-NEXT:    cmphsi16 a0, 2
1751; CHECK-NEXT:    mvcv16 a1
1752; CHECK-NEXT:    movi16 a0, 0
1753; CHECK-NEXT:    ld16.w a2, (sp, 4)
1754; CHECK-NEXT:    btsti16 a2, 0
1755; CHECK-NEXT:    movf32 a0, a1
1756; CHECK-NEXT:    addi16 sp, sp, 8
1757; CHECK-NEXT:    rts16
1758;
1759; GENERIC-LABEL: ICMP_LONG_I_ule:
1760; GENERIC:       # %bb.0: # %entry
1761; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1762; GENERIC-NEXT:    subi16 sp, sp, 4
1763; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1764; GENERIC-NEXT:    cmphsi16 a0, 2
1765; GENERIC-NEXT:    mvcv16 a0
1766; GENERIC-NEXT:    cmpnei16 a1, 0
1767; GENERIC-NEXT:    mvcv16 a1
1768; GENERIC-NEXT:    btsti16 a1, 0
1769; GENERIC-NEXT:    bt16 .LBB60_2
1770; GENERIC-NEXT:  # %bb.1: # %entry
1771; GENERIC-NEXT:    movi16 a0, 0
1772; GENERIC-NEXT:  .LBB60_2: # %entry
1773; GENERIC-NEXT:    addi16 sp, sp, 4
1774; GENERIC-NEXT:    rts16
1775entry:
1776  %icmp = icmp ule i64 %x, 1
1777  ret i1 %icmp
1778}
1779
1780define i1 @ICMP_SHORT_ule(i16 %x, i16 %y) {
1781; CHECK-LABEL: ICMP_SHORT_ule:
1782; CHECK:       # %bb.0: # %entry
1783; CHECK-NEXT:    zexth16 a1, a1
1784; CHECK-NEXT:    zexth16 a0, a0
1785; CHECK-NEXT:    cmphs16 a0, a1
1786; CHECK-NEXT:    mvc32 a0
1787; CHECK-NEXT:    rts16
1788;
1789; GENERIC-LABEL: ICMP_SHORT_ule:
1790; GENERIC:       # %bb.0: # %entry
1791; GENERIC-NEXT:    subi16 sp, sp, 4
1792; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1793; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
1794; GENERIC-NEXT:    .cfi_offset l0, -4
1795; GENERIC-NEXT:    subi16 sp, sp, 4
1796; GENERIC-NEXT:    .cfi_def_cfa_offset 8
1797; GENERIC-NEXT:    movi16 a2, 0
1798; GENERIC-NEXT:    lsli16 a3, a2, 24
1799; GENERIC-NEXT:    lsli16 a2, a2, 16
1800; GENERIC-NEXT:    or16 a2, a3
1801; GENERIC-NEXT:    movi16 a3, 255
1802; GENERIC-NEXT:    lsli16 l0, a3, 8
1803; GENERIC-NEXT:    or16 l0, a2
1804; GENERIC-NEXT:    or16 l0, a3
1805; GENERIC-NEXT:    and16 a1, l0
1806; GENERIC-NEXT:    and16 l0, a0
1807; GENERIC-NEXT:    cmphs16 l0, a1
1808; GENERIC-NEXT:    mvcv16 a1
1809; GENERIC-NEXT:    movi16 a0, 1
1810; GENERIC-NEXT:    subu16 a0, a1
1811; GENERIC-NEXT:    addi16 sp, sp, 4
1812; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
1813; GENERIC-NEXT:    addi16 sp, sp, 4
1814; GENERIC-NEXT:    rts16
1815entry:
1816  %icmp = icmp ule i16 %y, %x
1817  ret i1 %icmp
1818}
1819
1820define i1 @ICMP_SHORT_I_ule(i16 %x) {
1821; CHECK-LABEL: ICMP_SHORT_I_ule:
1822; CHECK:       # %bb.0: # %entry
1823; CHECK-NEXT:    zexth16 a0, a0
1824; CHECK-NEXT:    cmphsi16 a0, 2
1825; CHECK-NEXT:    mvcv16 a0
1826; CHECK-NEXT:    rts16
1827;
1828; GENERIC-LABEL: ICMP_SHORT_I_ule:
1829; GENERIC:       # %bb.0: # %entry
1830; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1831; GENERIC-NEXT:    subi16 sp, sp, 4
1832; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1833; GENERIC-NEXT:    movi16 a1, 0
1834; GENERIC-NEXT:    lsli16 a2, a1, 24
1835; GENERIC-NEXT:    lsli16 a1, a1, 16
1836; GENERIC-NEXT:    or16 a1, a2
1837; GENERIC-NEXT:    movi16 a2, 255
1838; GENERIC-NEXT:    lsli16 a3, a2, 8
1839; GENERIC-NEXT:    or16 a3, a1
1840; GENERIC-NEXT:    or16 a3, a2
1841; GENERIC-NEXT:    and16 a3, a0
1842; GENERIC-NEXT:    cmphsi16 a3, 2
1843; GENERIC-NEXT:    mvcv16 a0
1844; GENERIC-NEXT:    addi16 sp, sp, 4
1845; GENERIC-NEXT:    rts16
1846entry:
1847  %icmp = icmp ule i16 %x, 1
1848  ret i1 %icmp
1849}
1850
1851define i1 @ICMP_CHAR_ule(i8 %x, i8 %y) {
1852; CHECK-LABEL: ICMP_CHAR_ule:
1853; CHECK:       # %bb.0: # %entry
1854; CHECK-NEXT:    zextb16 a1, a1
1855; CHECK-NEXT:    zextb16 a0, a0
1856; CHECK-NEXT:    cmphs16 a0, a1
1857; CHECK-NEXT:    mvc32 a0
1858; CHECK-NEXT:    rts16
1859;
1860; GENERIC-LABEL: ICMP_CHAR_ule:
1861; GENERIC:       # %bb.0: # %entry
1862; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1863; GENERIC-NEXT:    subi16 sp, sp, 4
1864; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1865; GENERIC-NEXT:    movi16 a2, 255
1866; GENERIC-NEXT:    and16 a1, a2
1867; GENERIC-NEXT:    and16 a0, a2
1868; GENERIC-NEXT:    cmphs16 a0, a1
1869; GENERIC-NEXT:    mvcv16 a1
1870; GENERIC-NEXT:    movi16 a0, 1
1871; GENERIC-NEXT:    subu16 a0, a1
1872; GENERIC-NEXT:    addi16 sp, sp, 4
1873; GENERIC-NEXT:    rts16
1874entry:
1875  %icmp = icmp ule i8 %y, %x
1876  ret i1 %icmp
1877}
1878
1879define i1 @ICMP_CHAR_I_ule(i8 %x) {
1880; CHECK-LABEL: ICMP_CHAR_I_ule:
1881; CHECK:       # %bb.0: # %entry
1882; CHECK-NEXT:    zextb16 a0, a0
1883; CHECK-NEXT:    cmphsi16 a0, 2
1884; CHECK-NEXT:    mvcv16 a0
1885; CHECK-NEXT:    rts16
1886;
1887; GENERIC-LABEL: ICMP_CHAR_I_ule:
1888; GENERIC:       # %bb.0: # %entry
1889; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1890; GENERIC-NEXT:    subi16 sp, sp, 4
1891; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1892; GENERIC-NEXT:    movi16 a1, 255
1893; GENERIC-NEXT:    and16 a1, a0
1894; GENERIC-NEXT:    cmphsi16 a1, 2
1895; GENERIC-NEXT:    mvcv16 a0
1896; GENERIC-NEXT:    addi16 sp, sp, 4
1897; GENERIC-NEXT:    rts16
1898entry:
1899  %icmp = icmp ule i8 %x, 1
1900  ret i1 %icmp
1901}
1902
1903define i1 @ICMP_BIT_ule(i1 %x, i1 %y) {
1904; CHECK-LABEL: ICMP_BIT_ule:
1905; CHECK:       # %bb.0: # %entry
1906; CHECK-NEXT:    xori32 a1, a1, 1
1907; CHECK-NEXT:    or16 a0, a1
1908; CHECK-NEXT:    rts16
1909;
1910; GENERIC-LABEL: ICMP_BIT_ule:
1911; GENERIC:       # %bb.0: # %entry
1912; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1913; GENERIC-NEXT:    subi16 sp, sp, 4
1914; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1915; GENERIC-NEXT:    movi16 a2, 1
1916; GENERIC-NEXT:    xor16 a2, a1
1917; GENERIC-NEXT:    or16 a0, a2
1918; GENERIC-NEXT:    addi16 sp, sp, 4
1919; GENERIC-NEXT:    rts16
1920entry:
1921  %icmp = icmp ule i1 %y, %x
1922  ret i1 %icmp
1923}
1924
1925define i1 @ICMP_BIT_I_ule(i1 %x) {
1926; CHECK-LABEL: ICMP_BIT_I_ule:
1927; CHECK:       # %bb.0: # %entry
1928; CHECK-NEXT:    movi16 a0, 1
1929; CHECK-NEXT:    rts16
1930;
1931; GENERIC-LABEL: ICMP_BIT_I_ule:
1932; GENERIC:       # %bb.0: # %entry
1933; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1934; GENERIC-NEXT:    subi16 sp, sp, 4
1935; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1936; GENERIC-NEXT:    movi16 a0, 1
1937; GENERIC-NEXT:    addi16 sp, sp, 4
1938; GENERIC-NEXT:    rts16
1939entry:
1940  %icmp = icmp ule i1 %x, 1
1941  ret i1 %icmp
1942}
1943
1944;sgt
1945define i1 @icmpRR_sgt(i32 %x, i32 %y) {
1946; CHECK-LABEL: icmpRR_sgt:
1947; CHECK:       # %bb.0: # %entry
1948; CHECK-NEXT:    cmplt16 a0, a1
1949; CHECK-NEXT:    mvc32 a0
1950; CHECK-NEXT:    rts16
1951;
1952; GENERIC-LABEL: icmpRR_sgt:
1953; GENERIC:       # %bb.0: # %entry
1954; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1955; GENERIC-NEXT:    subi16 sp, sp, 4
1956; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1957; GENERIC-NEXT:    cmplt16 a0, a1
1958; GENERIC-NEXT:    mvcv16 a1
1959; GENERIC-NEXT:    movi16 a0, 1
1960; GENERIC-NEXT:    subu16 a0, a1
1961; GENERIC-NEXT:    addi16 sp, sp, 4
1962; GENERIC-NEXT:    rts16
1963entry:
1964  %icmp = icmp sgt i32 %y, %x
1965  ret i1 %icmp
1966}
1967
1968define i1 @icmpRI_sgt(i32 %x) {
1969; CHECK-LABEL: icmpRI_sgt:
1970; CHECK:       # %bb.0: # %entry
1971; CHECK-NEXT:    movi16 a1, 10
1972; CHECK-NEXT:    cmplt16 a1, a0
1973; CHECK-NEXT:    mvc32 a0
1974; CHECK-NEXT:    rts16
1975;
1976; GENERIC-LABEL: icmpRI_sgt:
1977; GENERIC:       # %bb.0: # %entry
1978; GENERIC-NEXT:    .cfi_def_cfa_offset 0
1979; GENERIC-NEXT:    subi16 sp, sp, 4
1980; GENERIC-NEXT:    .cfi_def_cfa_offset 4
1981; GENERIC-NEXT:    movi16 a1, 10
1982; GENERIC-NEXT:    cmplt16 a1, a0
1983; GENERIC-NEXT:    mvcv16 a1
1984; GENERIC-NEXT:    movi16 a0, 1
1985; GENERIC-NEXT:    subu16 a0, a1
1986; GENERIC-NEXT:    addi16 sp, sp, 4
1987; GENERIC-NEXT:    rts16
1988entry:
1989  %icmp = icmp sgt i32 %x, 10
1990  ret i1 %icmp
1991}
1992
1993define i1 @icmpRI_X_sgt(i32 %x) {
1994; CHECK-LABEL: icmpRI_X_sgt:
1995; CHECK:       # %bb.0: # %entry
1996; CHECK-NEXT:    movih32 a1, 62
1997; CHECK-NEXT:    ori32 a1, a1, 33768
1998; CHECK-NEXT:    cmplt16 a1, a0
1999; CHECK-NEXT:    mvc32 a0
2000; CHECK-NEXT:    rts16
2001;
2002; GENERIC-LABEL: icmpRI_X_sgt:
2003; GENERIC:       # %bb.0: # %entry
2004; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2005; GENERIC-NEXT:    subi16 sp, sp, 4
2006; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2007; GENERIC-NEXT:    movi16 a1, 0
2008; GENERIC-NEXT:    lsli16 a1, a1, 24
2009; GENERIC-NEXT:    movi16 a2, 62
2010; GENERIC-NEXT:    lsli16 a2, a2, 16
2011; GENERIC-NEXT:    or16 a2, a1
2012; GENERIC-NEXT:    movi16 a1, 131
2013; GENERIC-NEXT:    lsli16 a1, a1, 8
2014; GENERIC-NEXT:    or16 a1, a2
2015; GENERIC-NEXT:    movi16 a2, 232
2016; GENERIC-NEXT:    or16 a2, a1
2017; GENERIC-NEXT:    cmplt16 a2, a0
2018; GENERIC-NEXT:    mvcv16 a1
2019; GENERIC-NEXT:    movi16 a0, 1
2020; GENERIC-NEXT:    subu16 a0, a1
2021; GENERIC-NEXT:    addi16 sp, sp, 4
2022; GENERIC-NEXT:    rts16
2023entry:
2024  %icmp = icmp sgt i32 %x, 4097000
2025  ret i1 %icmp
2026}
2027
2028define i1 @ICMP_LONG_sgt(i64 %x, i64 %y) {
2029; CHECK-LABEL: ICMP_LONG_sgt:
2030; CHECK:       # %bb.0: # %entry
2031; CHECK-NEXT:    .cfi_def_cfa_offset 0
2032; CHECK-NEXT:    subi16 sp, sp, 12
2033; CHECK-NEXT:    .cfi_def_cfa_offset 12
2034; CHECK-NEXT:    cmplt16 a1, a3
2035; CHECK-NEXT:    mvc32 t0
2036; CHECK-NEXT:    st32.w t0, (sp, 4)
2037; CHECK-NEXT:    cmpne16 a3, a1
2038; CHECK-NEXT:    mvc32 a1
2039; CHECK-NEXT:    st16.w a1, (sp, 8)
2040; CHECK-NEXT:    cmphs16 a0, a2
2041; CHECK-NEXT:    mvcv16 a1
2042; CHECK-NEXT:    ld16.w a0, (sp, 4)
2043; CHECK-NEXT:    btsti16 a0, 0
2044; CHECK-NEXT:    mvc32 a0
2045; CHECK-NEXT:    ld16.w a2, (sp, 8)
2046; CHECK-NEXT:    btsti16 a2, 0
2047; CHECK-NEXT:    movf32 a0, a1
2048; CHECK-NEXT:    addi16 sp, sp, 12
2049; CHECK-NEXT:    rts16
2050;
2051; GENERIC-LABEL: ICMP_LONG_sgt:
2052; GENERIC:       # %bb.0: # %entry
2053; GENERIC-NEXT:    subi16 sp, sp, 4
2054; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2055; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2056; GENERIC-NEXT:    .cfi_offset l0, -4
2057; GENERIC-NEXT:    subi16 sp, sp, 4
2058; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2059; GENERIC-NEXT:    cmplt16 a1, a3
2060; GENERIC-NEXT:    mvcv16 l0
2061; GENERIC-NEXT:    cmphs16 a0, a2
2062; GENERIC-NEXT:    mvcv16 a0
2063; GENERIC-NEXT:    cmpne16 a3, a1
2064; GENERIC-NEXT:    mvcv16 a1
2065; GENERIC-NEXT:    btsti16 a1, 0
2066; GENERIC-NEXT:    bt16 .LBB70_2
2067; GENERIC-NEXT:  # %bb.1: # %entry
2068; GENERIC-NEXT:    movi16 a0, 1
2069; GENERIC-NEXT:    subu16 a0, l0
2070; GENERIC-NEXT:  .LBB70_2: # %entry
2071; GENERIC-NEXT:    addi16 sp, sp, 4
2072; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2073; GENERIC-NEXT:    addi16 sp, sp, 4
2074; GENERIC-NEXT:    rts16
2075entry:
2076  %icmp = icmp sgt i64 %y, %x
2077  ret i1 %icmp
2078}
2079
2080define i1 @ICMP_LONG_I_sgt(i64 %x) {
2081; CHECK-LABEL: ICMP_LONG_I_sgt:
2082; CHECK:       # %bb.0: # %entry
2083; CHECK-NEXT:    .cfi_def_cfa_offset 0
2084; CHECK-NEXT:    subi16 sp, sp, 12
2085; CHECK-NEXT:    .cfi_def_cfa_offset 12
2086; CHECK-NEXT:    movi16 a2, 0
2087; CHECK-NEXT:    cmplt16 a2, a1
2088; CHECK-NEXT:    mvc32 a2
2089; CHECK-NEXT:    st16.w a2, (sp, 8)
2090; CHECK-NEXT:    movi16 a2, 1
2091; CHECK-NEXT:    cmphs16 a2, a0
2092; CHECK-NEXT:    mvcv16 a2
2093; CHECK-NEXT:    cmpnei16 a1, 0
2094; CHECK-NEXT:    mvc32 a0
2095; CHECK-NEXT:    st16.w a0, (sp, 4)
2096; CHECK-NEXT:    ld16.w a0, (sp, 8)
2097; CHECK-NEXT:    btsti16 a0, 0
2098; CHECK-NEXT:    mvc32 a0
2099; CHECK-NEXT:    ld16.w a1, (sp, 4)
2100; CHECK-NEXT:    btsti16 a1, 0
2101; CHECK-NEXT:    movf32 a0, a2
2102; CHECK-NEXT:    addi16 sp, sp, 12
2103; CHECK-NEXT:    rts16
2104;
2105; GENERIC-LABEL: ICMP_LONG_I_sgt:
2106; GENERIC:       # %bb.0: # %entry
2107; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2108; GENERIC-NEXT:    subi16 sp, sp, 4
2109; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2110; GENERIC-NEXT:    movi16 a2, 0
2111; GENERIC-NEXT:    cmplt16 a2, a1
2112; GENERIC-NEXT:    mvcv16 a2
2113; GENERIC-NEXT:    movi16 a3, 1
2114; GENERIC-NEXT:    cmphs16 a3, a0
2115; GENERIC-NEXT:    mvcv16 a0
2116; GENERIC-NEXT:    cmpnei16 a1, 0
2117; GENERIC-NEXT:    mvcv16 a1
2118; GENERIC-NEXT:    btsti16 a1, 0
2119; GENERIC-NEXT:    bt16 .LBB71_2
2120; GENERIC-NEXT:  # %bb.1: # %entry
2121; GENERIC-NEXT:    subu16 a3, a2
2122; GENERIC-NEXT:    mov16 a0, a3
2123; GENERIC-NEXT:  .LBB71_2: # %entry
2124; GENERIC-NEXT:    addi16 sp, sp, 4
2125; GENERIC-NEXT:    rts16
2126entry:
2127  %icmp = icmp sgt i64 %x, 1
2128  ret i1 %icmp
2129}
2130
2131define i1 @ICMP_SHORT_sgt(i16 %x, i16 %y) {
2132; CHECK-LABEL: ICMP_SHORT_sgt:
2133; CHECK:       # %bb.0: # %entry
2134; CHECK-NEXT:    sexth16 a1, a1
2135; CHECK-NEXT:    sexth16 a0, a0
2136; CHECK-NEXT:    cmplt16 a0, a1
2137; CHECK-NEXT:    mvc32 a0
2138; CHECK-NEXT:    rts16
2139;
2140; GENERIC-LABEL: ICMP_SHORT_sgt:
2141; GENERIC:       # %bb.0: # %entry
2142; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2143; GENERIC-NEXT:    subi16 sp, sp, 4
2144; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2145; GENERIC-NEXT:    sexth16 a1, a1
2146; GENERIC-NEXT:    sexth16 a0, a0
2147; GENERIC-NEXT:    cmplt16 a0, a1
2148; GENERIC-NEXT:    mvcv16 a1
2149; GENERIC-NEXT:    movi16 a0, 1
2150; GENERIC-NEXT:    subu16 a0, a1
2151; GENERIC-NEXT:    addi16 sp, sp, 4
2152; GENERIC-NEXT:    rts16
2153entry:
2154  %icmp = icmp sgt i16 %y, %x
2155  ret i1 %icmp
2156}
2157
2158define i1 @ICMP_SHORT_I_sgt(i16 %x) {
2159; CHECK-LABEL: ICMP_SHORT_I_sgt:
2160; CHECK:       # %bb.0: # %entry
2161; CHECK-NEXT:    sexth16 a0, a0
2162; CHECK-NEXT:    movi16 a1, 1
2163; CHECK-NEXT:    cmplt16 a1, a0
2164; CHECK-NEXT:    mvc32 a0
2165; CHECK-NEXT:    rts16
2166;
2167; GENERIC-LABEL: ICMP_SHORT_I_sgt:
2168; GENERIC:       # %bb.0: # %entry
2169; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2170; GENERIC-NEXT:    subi16 sp, sp, 4
2171; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2172; GENERIC-NEXT:    sexth16 a1, a0
2173; GENERIC-NEXT:    movi16 a0, 1
2174; GENERIC-NEXT:    cmplt16 a0, a1
2175; GENERIC-NEXT:    mvcv16 a1
2176; GENERIC-NEXT:    subu16 a0, a1
2177; GENERIC-NEXT:    addi16 sp, sp, 4
2178; GENERIC-NEXT:    rts16
2179entry:
2180  %icmp = icmp sgt i16 %x, 1
2181  ret i1 %icmp
2182}
2183
2184define i1 @ICMP_CHAR_sgt(i8 %x, i8 %y) {
2185; CHECK-LABEL: ICMP_CHAR_sgt:
2186; CHECK:       # %bb.0: # %entry
2187; CHECK-NEXT:    sextb16 a1, a1
2188; CHECK-NEXT:    sextb16 a0, a0
2189; CHECK-NEXT:    cmplt16 a0, a1
2190; CHECK-NEXT:    mvc32 a0
2191; CHECK-NEXT:    rts16
2192;
2193; GENERIC-LABEL: ICMP_CHAR_sgt:
2194; GENERIC:       # %bb.0: # %entry
2195; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2196; GENERIC-NEXT:    subi16 sp, sp, 4
2197; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2198; GENERIC-NEXT:    sextb16 a1, a1
2199; GENERIC-NEXT:    sextb16 a0, a0
2200; GENERIC-NEXT:    cmplt16 a0, a1
2201; GENERIC-NEXT:    mvcv16 a1
2202; GENERIC-NEXT:    movi16 a0, 1
2203; GENERIC-NEXT:    subu16 a0, a1
2204; GENERIC-NEXT:    addi16 sp, sp, 4
2205; GENERIC-NEXT:    rts16
2206entry:
2207  %icmp = icmp sgt i8 %y, %x
2208  ret i1 %icmp
2209}
2210
2211define i1 @ICMP_CHAR_I_sgt(i8 %x) {
2212; CHECK-LABEL: ICMP_CHAR_I_sgt:
2213; CHECK:       # %bb.0: # %entry
2214; CHECK-NEXT:    sextb16 a0, a0
2215; CHECK-NEXT:    movi16 a1, 1
2216; CHECK-NEXT:    cmplt16 a1, a0
2217; CHECK-NEXT:    mvc32 a0
2218; CHECK-NEXT:    rts16
2219;
2220; GENERIC-LABEL: ICMP_CHAR_I_sgt:
2221; GENERIC:       # %bb.0: # %entry
2222; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2223; GENERIC-NEXT:    subi16 sp, sp, 4
2224; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2225; GENERIC-NEXT:    sextb16 a1, a0
2226; GENERIC-NEXT:    movi16 a0, 1
2227; GENERIC-NEXT:    cmplt16 a0, a1
2228; GENERIC-NEXT:    mvcv16 a1
2229; GENERIC-NEXT:    subu16 a0, a1
2230; GENERIC-NEXT:    addi16 sp, sp, 4
2231; GENERIC-NEXT:    rts16
2232entry:
2233  %icmp = icmp sgt i8 %x, 1
2234  ret i1 %icmp
2235}
2236
2237define i1 @ICMP_BIT_sgt(i1 %x, i1 %y) {
2238; CHECK-LABEL: ICMP_BIT_sgt:
2239; CHECK:       # %bb.0: # %entry
2240; CHECK-NEXT:    xori32 a1, a1, 1
2241; CHECK-NEXT:    and16 a0, a1
2242; CHECK-NEXT:    rts16
2243;
2244; GENERIC-LABEL: ICMP_BIT_sgt:
2245; GENERIC:       # %bb.0: # %entry
2246; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2247; GENERIC-NEXT:    subi16 sp, sp, 4
2248; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2249; GENERIC-NEXT:    movi16 a2, 1
2250; GENERIC-NEXT:    xor16 a2, a1
2251; GENERIC-NEXT:    and16 a0, a2
2252; GENERIC-NEXT:    addi16 sp, sp, 4
2253; GENERIC-NEXT:    rts16
2254entry:
2255  %icmp = icmp sgt i1 %y, %x
2256  ret i1 %icmp
2257}
2258
2259define i1 @ICMP_BIT_I_sgt(i1 %x) {
2260; CHECK-LABEL: ICMP_BIT_I_sgt:
2261; CHECK:       # %bb.0: # %entry
2262; CHECK-NEXT:    xori32 a0, a0, 1
2263; CHECK-NEXT:    rts16
2264;
2265; GENERIC-LABEL: ICMP_BIT_I_sgt:
2266; GENERIC:       # %bb.0: # %entry
2267; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2268; GENERIC-NEXT:    subi16 sp, sp, 4
2269; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2270; GENERIC-NEXT:    movi16 a1, 1
2271; GENERIC-NEXT:    xor16 a0, a1
2272; GENERIC-NEXT:    addi16 sp, sp, 4
2273; GENERIC-NEXT:    rts16
2274entry:
2275  %icmp = icmp sgt i1 %x, 1
2276  ret i1 %icmp
2277}
2278
2279;sge
2280define i1 @icmpRR_sge(i32 %x, i32 %y) {
2281; CHECK-LABEL: icmpRR_sge:
2282; CHECK:       # %bb.0: # %entry
2283; CHECK-NEXT:    cmplt16 a1, a0
2284; CHECK-NEXT:    mvcv16 a0
2285; CHECK-NEXT:    rts16
2286;
2287; GENERIC-LABEL: icmpRR_sge:
2288; GENERIC:       # %bb.0: # %entry
2289; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2290; GENERIC-NEXT:    subi16 sp, sp, 4
2291; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2292; GENERIC-NEXT:    cmplt16 a1, a0
2293; GENERIC-NEXT:    mvcv16 a0
2294; GENERIC-NEXT:    addi16 sp, sp, 4
2295; GENERIC-NEXT:    rts16
2296entry:
2297  %icmp = icmp sge i32 %y, %x
2298  ret i1 %icmp
2299}
2300
2301define i1 @icmpRI_sge(i32 %x) {
2302; CHECK-LABEL: icmpRI_sge:
2303; CHECK:       # %bb.0: # %entry
2304; CHECK-NEXT:    movi16 a1, 9
2305; CHECK-NEXT:    cmplt16 a1, a0
2306; CHECK-NEXT:    mvc32 a0
2307; CHECK-NEXT:    rts16
2308;
2309; GENERIC-LABEL: icmpRI_sge:
2310; GENERIC:       # %bb.0: # %entry
2311; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2312; GENERIC-NEXT:    subi16 sp, sp, 4
2313; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2314; GENERIC-NEXT:    movi16 a1, 9
2315; GENERIC-NEXT:    cmplt16 a1, a0
2316; GENERIC-NEXT:    mvcv16 a1
2317; GENERIC-NEXT:    movi16 a0, 1
2318; GENERIC-NEXT:    subu16 a0, a1
2319; GENERIC-NEXT:    addi16 sp, sp, 4
2320; GENERIC-NEXT:    rts16
2321entry:
2322  %icmp = icmp sge i32 %x, 10
2323  ret i1 %icmp
2324}
2325
2326define i1 @icmpRI_X_sge(i32 %x) {
2327; CHECK-LABEL: icmpRI_X_sge:
2328; CHECK:       # %bb.0: # %entry
2329; CHECK-NEXT:    movih32 a1, 62
2330; CHECK-NEXT:    ori32 a1, a1, 33767
2331; CHECK-NEXT:    cmplt16 a1, a0
2332; CHECK-NEXT:    mvc32 a0
2333; CHECK-NEXT:    rts16
2334;
2335; GENERIC-LABEL: icmpRI_X_sge:
2336; GENERIC:       # %bb.0: # %entry
2337; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2338; GENERIC-NEXT:    subi16 sp, sp, 4
2339; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2340; GENERIC-NEXT:    movi16 a1, 0
2341; GENERIC-NEXT:    lsli16 a1, a1, 24
2342; GENERIC-NEXT:    movi16 a2, 62
2343; GENERIC-NEXT:    lsli16 a2, a2, 16
2344; GENERIC-NEXT:    or16 a2, a1
2345; GENERIC-NEXT:    movi16 a1, 131
2346; GENERIC-NEXT:    lsli16 a1, a1, 8
2347; GENERIC-NEXT:    or16 a1, a2
2348; GENERIC-NEXT:    movi16 a2, 231
2349; GENERIC-NEXT:    or16 a2, a1
2350; GENERIC-NEXT:    cmplt16 a2, a0
2351; GENERIC-NEXT:    mvcv16 a1
2352; GENERIC-NEXT:    movi16 a0, 1
2353; GENERIC-NEXT:    subu16 a0, a1
2354; GENERIC-NEXT:    addi16 sp, sp, 4
2355; GENERIC-NEXT:    rts16
2356entry:
2357  %icmp = icmp sge i32 %x, 4097000
2358  ret i1 %icmp
2359}
2360
2361define i1 @ICMP_LONG_sge(i64 %x, i64 %y) {
2362; CHECK-LABEL: ICMP_LONG_sge:
2363; CHECK:       # %bb.0: # %entry
2364; CHECK-NEXT:    .cfi_def_cfa_offset 0
2365; CHECK-NEXT:    subi16 sp, sp, 12
2366; CHECK-NEXT:    .cfi_def_cfa_offset 12
2367; CHECK-NEXT:    cmphs16 a2, a0
2368; CHECK-NEXT:    mvc32 a0
2369; CHECK-NEXT:    st16.w a0, (sp, 4)
2370; CHECK-NEXT:    cmpne16 a3, a1
2371; CHECK-NEXT:    mvc32 a0
2372; CHECK-NEXT:    st16.w a0, (sp, 8)
2373; CHECK-NEXT:    cmplt16 a3, a1
2374; CHECK-NEXT:    mvcv16 a0
2375; CHECK-NEXT:    ld16.w a1, (sp, 4)
2376; CHECK-NEXT:    btsti16 a1, 0
2377; CHECK-NEXT:    mvc32 a1
2378; CHECK-NEXT:    ld16.w a2, (sp, 8)
2379; CHECK-NEXT:    btsti16 a2, 0
2380; CHECK-NEXT:    movf32 a0, a1
2381; CHECK-NEXT:    addi16 sp, sp, 12
2382; CHECK-NEXT:    rts16
2383;
2384; GENERIC-LABEL: ICMP_LONG_sge:
2385; GENERIC:       # %bb.0: # %entry
2386; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2387; GENERIC-NEXT:    subi16 sp, sp, 4
2388; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2389; GENERIC-NEXT:    cmphs16 a2, a0
2390; GENERIC-NEXT:    mvcv16 a2
2391; GENERIC-NEXT:    cmplt16 a3, a1
2392; GENERIC-NEXT:    mvcv16 a0
2393; GENERIC-NEXT:    cmpne16 a3, a1
2394; GENERIC-NEXT:    mvcv16 a1
2395; GENERIC-NEXT:    btsti16 a1, 0
2396; GENERIC-NEXT:    bf16 .LBB81_2
2397; GENERIC-NEXT:  # %bb.1:
2398; GENERIC-NEXT:    movi16 a0, 1
2399; GENERIC-NEXT:    subu16 a0, a2
2400; GENERIC-NEXT:  .LBB81_2: # %entry
2401; GENERIC-NEXT:    addi16 sp, sp, 4
2402; GENERIC-NEXT:    rts16
2403entry:
2404  %icmp = icmp sge i64 %y, %x
2405  ret i1 %icmp
2406}
2407
2408define i1 @ICMP_LONG_I_sge(i64 %x) {
2409; CHECK-LABEL: ICMP_LONG_I_sge:
2410; CHECK:       # %bb.0: # %entry
2411; CHECK-NEXT:    .cfi_def_cfa_offset 0
2412; CHECK-NEXT:    subi16 sp, sp, 16
2413; CHECK-NEXT:    .cfi_def_cfa_offset 16
2414; CHECK-NEXT:    movi16 a2, 0
2415; CHECK-NEXT:    cmplt16 a2, a1
2416; CHECK-NEXT:    mvc32 a2
2417; CHECK-NEXT:    st16.w a2, (sp, 12)
2418; CHECK-NEXT:    cmpnei16 a0, 0
2419; CHECK-NEXT:    mvc32 a0
2420; CHECK-NEXT:    st16.w a0, (sp, 4)
2421; CHECK-NEXT:    cmpnei16 a1, 0
2422; CHECK-NEXT:    mvc32 a0
2423; CHECK-NEXT:    st16.w a0, (sp, 8)
2424; CHECK-NEXT:    ld16.w a0, (sp, 4)
2425; CHECK-NEXT:    btsti16 a0, 0
2426; CHECK-NEXT:    mvc32 a1
2427; CHECK-NEXT:    ld16.w a0, (sp, 12)
2428; CHECK-NEXT:    btsti16 a0, 0
2429; CHECK-NEXT:    mvc32 a0
2430; CHECK-NEXT:    ld16.w a2, (sp, 8)
2431; CHECK-NEXT:    btsti16 a2, 0
2432; CHECK-NEXT:    movf32 a0, a1
2433; CHECK-NEXT:    addi16 sp, sp, 16
2434; CHECK-NEXT:    rts16
2435;
2436; GENERIC-LABEL: ICMP_LONG_I_sge:
2437; GENERIC:       # %bb.0: # %entry
2438; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2439; GENERIC-NEXT:    subi16 sp, sp, 4
2440; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2441; GENERIC-NEXT:    mov16 a2, a0
2442; GENERIC-NEXT:    movi16 a0, 0
2443; GENERIC-NEXT:    cmplt16 a0, a1
2444; GENERIC-NEXT:    mvcv16 a3
2445; GENERIC-NEXT:    movi16 a0, 1
2446; GENERIC-NEXT:    cmpnei16 a2, 0
2447; GENERIC-NEXT:    mvcv16 a2
2448; GENERIC-NEXT:    cmpnei16 a1, 0
2449; GENERIC-NEXT:    mvcv16 a1
2450; GENERIC-NEXT:    btsti16 a1, 0
2451; GENERIC-NEXT:    bt16 .LBB82_2
2452; GENERIC-NEXT:  # %bb.1: # %entry
2453; GENERIC-NEXT:    subu16 a0, a3
2454; GENERIC-NEXT:    addi16 sp, sp, 4
2455; GENERIC-NEXT:    rts16
2456; GENERIC-NEXT:  .LBB82_2:
2457; GENERIC-NEXT:    subu16 a0, a2
2458; GENERIC-NEXT:    addi16 sp, sp, 4
2459; GENERIC-NEXT:    rts16
2460entry:
2461  %icmp = icmp sge i64 %x, 1
2462  ret i1 %icmp
2463}
2464
2465define i1 @ICMP_SHORT_sge(i16 %x, i16 %y) {
2466; CHECK-LABEL: ICMP_SHORT_sge:
2467; CHECK:       # %bb.0: # %entry
2468; CHECK-NEXT:    sexth16 a0, a0
2469; CHECK-NEXT:    sexth16 a1, a1
2470; CHECK-NEXT:    cmplt16 a1, a0
2471; CHECK-NEXT:    mvcv16 a0
2472; CHECK-NEXT:    rts16
2473;
2474; GENERIC-LABEL: ICMP_SHORT_sge:
2475; GENERIC:       # %bb.0: # %entry
2476; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2477; GENERIC-NEXT:    subi16 sp, sp, 4
2478; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2479; GENERIC-NEXT:    sexth16 a0, a0
2480; GENERIC-NEXT:    sexth16 a1, a1
2481; GENERIC-NEXT:    cmplt16 a1, a0
2482; GENERIC-NEXT:    mvcv16 a0
2483; GENERIC-NEXT:    addi16 sp, sp, 4
2484; GENERIC-NEXT:    rts16
2485entry:
2486  %icmp = icmp sge i16 %y, %x
2487  ret i1 %icmp
2488}
2489
2490define i1 @ICMP_SHORT_I_sge(i16 %x) {
2491; CHECK-LABEL: ICMP_SHORT_I_sge:
2492; CHECK:       # %bb.0: # %entry
2493; CHECK-NEXT:    sexth16 a0, a0
2494; CHECK-NEXT:    movi16 a1, 0
2495; CHECK-NEXT:    cmplt16 a1, a0
2496; CHECK-NEXT:    mvc32 a0
2497; CHECK-NEXT:    rts16
2498;
2499; GENERIC-LABEL: ICMP_SHORT_I_sge:
2500; GENERIC:       # %bb.0: # %entry
2501; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2502; GENERIC-NEXT:    subi16 sp, sp, 4
2503; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2504; GENERIC-NEXT:    sexth16 a0, a0
2505; GENERIC-NEXT:    movi16 a1, 0
2506; GENERIC-NEXT:    cmplt16 a1, a0
2507; GENERIC-NEXT:    mvcv16 a1
2508; GENERIC-NEXT:    movi16 a0, 1
2509; GENERIC-NEXT:    subu16 a0, a1
2510; GENERIC-NEXT:    addi16 sp, sp, 4
2511; GENERIC-NEXT:    rts16
2512entry:
2513  %icmp = icmp sge i16 %x, 1
2514  ret i1 %icmp
2515}
2516
2517define i1 @ICMP_CHAR_sge(i8 %x, i8 %y) {
2518; CHECK-LABEL: ICMP_CHAR_sge:
2519; CHECK:       # %bb.0: # %entry
2520; CHECK-NEXT:    sextb16 a0, a0
2521; CHECK-NEXT:    sextb16 a1, a1
2522; CHECK-NEXT:    cmplt16 a1, a0
2523; CHECK-NEXT:    mvcv16 a0
2524; CHECK-NEXT:    rts16
2525;
2526; GENERIC-LABEL: ICMP_CHAR_sge:
2527; GENERIC:       # %bb.0: # %entry
2528; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2529; GENERIC-NEXT:    subi16 sp, sp, 4
2530; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2531; GENERIC-NEXT:    sextb16 a0, a0
2532; GENERIC-NEXT:    sextb16 a1, a1
2533; GENERIC-NEXT:    cmplt16 a1, a0
2534; GENERIC-NEXT:    mvcv16 a0
2535; GENERIC-NEXT:    addi16 sp, sp, 4
2536; GENERIC-NEXT:    rts16
2537entry:
2538  %icmp = icmp sge i8 %y, %x
2539  ret i1 %icmp
2540}
2541
2542define i1 @ICMP_CHAR_I_sge(i8 %x) {
2543; CHECK-LABEL: ICMP_CHAR_I_sge:
2544; CHECK:       # %bb.0: # %entry
2545; CHECK-NEXT:    sextb16 a0, a0
2546; CHECK-NEXT:    movi16 a1, 0
2547; CHECK-NEXT:    cmplt16 a1, a0
2548; CHECK-NEXT:    mvc32 a0
2549; CHECK-NEXT:    rts16
2550;
2551; GENERIC-LABEL: ICMP_CHAR_I_sge:
2552; GENERIC:       # %bb.0: # %entry
2553; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2554; GENERIC-NEXT:    subi16 sp, sp, 4
2555; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2556; GENERIC-NEXT:    sextb16 a0, a0
2557; GENERIC-NEXT:    movi16 a1, 0
2558; GENERIC-NEXT:    cmplt16 a1, a0
2559; GENERIC-NEXT:    mvcv16 a1
2560; GENERIC-NEXT:    movi16 a0, 1
2561; GENERIC-NEXT:    subu16 a0, a1
2562; GENERIC-NEXT:    addi16 sp, sp, 4
2563; GENERIC-NEXT:    rts16
2564entry:
2565  %icmp = icmp sge i8 %x, 1
2566  ret i1 %icmp
2567}
2568
2569define i1 @ICMP_BIT_sge(i1 %x, i1 %y) {
2570; CHECK-LABEL: ICMP_BIT_sge:
2571; CHECK:       # %bb.0: # %entry
2572; CHECK-NEXT:    xori32 a1, a1, 1
2573; CHECK-NEXT:    or16 a0, a1
2574; CHECK-NEXT:    rts16
2575;
2576; GENERIC-LABEL: ICMP_BIT_sge:
2577; GENERIC:       # %bb.0: # %entry
2578; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2579; GENERIC-NEXT:    subi16 sp, sp, 4
2580; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2581; GENERIC-NEXT:    movi16 a2, 1
2582; GENERIC-NEXT:    xor16 a2, a1
2583; GENERIC-NEXT:    or16 a0, a2
2584; GENERIC-NEXT:    addi16 sp, sp, 4
2585; GENERIC-NEXT:    rts16
2586entry:
2587  %icmp = icmp sge i1 %y, %x
2588  ret i1 %icmp
2589}
2590
2591define i1 @ICMP_BIT_I_sge(i1 %x) {
2592; CHECK-LABEL: ICMP_BIT_I_sge:
2593; CHECK:       # %bb.0: # %entry
2594; CHECK-NEXT:    movi16 a0, 1
2595; CHECK-NEXT:    rts16
2596;
2597; GENERIC-LABEL: ICMP_BIT_I_sge:
2598; GENERIC:       # %bb.0: # %entry
2599; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2600; GENERIC-NEXT:    subi16 sp, sp, 4
2601; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2602; GENERIC-NEXT:    movi16 a0, 1
2603; GENERIC-NEXT:    addi16 sp, sp, 4
2604; GENERIC-NEXT:    rts16
2605entry:
2606  %icmp = icmp sge i1 %x, 1
2607  ret i1 %icmp
2608}
2609
2610;slt
2611define i1 @icmpRR_slt(i32 %x, i32 %y) {
2612; CHECK-LABEL: icmpRR_slt:
2613; CHECK:       # %bb.0: # %entry
2614; CHECK-NEXT:    cmplt16 a1, a0
2615; CHECK-NEXT:    mvc32 a0
2616; CHECK-NEXT:    rts16
2617;
2618; GENERIC-LABEL: icmpRR_slt:
2619; GENERIC:       # %bb.0: # %entry
2620; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2621; GENERIC-NEXT:    subi16 sp, sp, 4
2622; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2623; GENERIC-NEXT:    cmplt16 a1, a0
2624; GENERIC-NEXT:    mvcv16 a1
2625; GENERIC-NEXT:    movi16 a0, 1
2626; GENERIC-NEXT:    subu16 a0, a1
2627; GENERIC-NEXT:    addi16 sp, sp, 4
2628; GENERIC-NEXT:    rts16
2629entry:
2630  %icmp = icmp slt i32 %y, %x
2631  ret i1 %icmp
2632}
2633
2634define i1 @icmpRI_slt(i32 %x) {
2635; CHECK-LABEL: icmpRI_slt:
2636; CHECK:       # %bb.0: # %entry
2637; CHECK-NEXT:    cmplti16 a0, 10
2638; CHECK-NEXT:    mvc32 a0
2639; CHECK-NEXT:    rts16
2640;
2641; GENERIC-LABEL: icmpRI_slt:
2642; GENERIC:       # %bb.0: # %entry
2643; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2644; GENERIC-NEXT:    subi16 sp, sp, 4
2645; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2646; GENERIC-NEXT:    cmplti16 a0, 10
2647; GENERIC-NEXT:    mvcv16 a1
2648; GENERIC-NEXT:    movi16 a0, 1
2649; GENERIC-NEXT:    subu16 a0, a1
2650; GENERIC-NEXT:    addi16 sp, sp, 4
2651; GENERIC-NEXT:    rts16
2652entry:
2653  %icmp = icmp slt i32 %x, 10
2654  ret i1 %icmp
2655}
2656
2657define i1 @icmpRI_X_slt(i32 %x) {
2658; CHECK-LABEL: icmpRI_X_slt:
2659; CHECK:       # %bb.0: # %entry
2660; CHECK-NEXT:    movih32 a1, 62
2661; CHECK-NEXT:    ori32 a1, a1, 33768
2662; CHECK-NEXT:    cmplt16 a0, a1
2663; CHECK-NEXT:    mvc32 a0
2664; CHECK-NEXT:    rts16
2665;
2666; GENERIC-LABEL: icmpRI_X_slt:
2667; GENERIC:       # %bb.0: # %entry
2668; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2669; GENERIC-NEXT:    subi16 sp, sp, 4
2670; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2671; GENERIC-NEXT:    movi16 a1, 0
2672; GENERIC-NEXT:    lsli16 a1, a1, 24
2673; GENERIC-NEXT:    movi16 a2, 62
2674; GENERIC-NEXT:    lsli16 a2, a2, 16
2675; GENERIC-NEXT:    or16 a2, a1
2676; GENERIC-NEXT:    movi16 a1, 131
2677; GENERIC-NEXT:    lsli16 a1, a1, 8
2678; GENERIC-NEXT:    or16 a1, a2
2679; GENERIC-NEXT:    movi16 a2, 232
2680; GENERIC-NEXT:    or16 a2, a1
2681; GENERIC-NEXT:    cmplt16 a0, a2
2682; GENERIC-NEXT:    mvcv16 a1
2683; GENERIC-NEXT:    movi16 a0, 1
2684; GENERIC-NEXT:    subu16 a0, a1
2685; GENERIC-NEXT:    addi16 sp, sp, 4
2686; GENERIC-NEXT:    rts16
2687entry:
2688  %icmp = icmp slt i32 %x, 4097000
2689  ret i1 %icmp
2690}
2691
2692define i1 @ICMP_LONG_slt(i64 %x, i64 %y) {
2693; CHECK-LABEL: ICMP_LONG_slt:
2694; CHECK:       # %bb.0: # %entry
2695; CHECK-NEXT:    .cfi_def_cfa_offset 0
2696; CHECK-NEXT:    subi16 sp, sp, 12
2697; CHECK-NEXT:    .cfi_def_cfa_offset 12
2698; CHECK-NEXT:    cmplt16 a3, a1
2699; CHECK-NEXT:    mvc32 t0
2700; CHECK-NEXT:    st32.w t0, (sp, 4)
2701; CHECK-NEXT:    cmpne16 a3, a1
2702; CHECK-NEXT:    mvc32 a1
2703; CHECK-NEXT:    st16.w a1, (sp, 8)
2704; CHECK-NEXT:    cmphs16 a2, a0
2705; CHECK-NEXT:    mvcv16 a1
2706; CHECK-NEXT:    ld16.w a0, (sp, 4)
2707; CHECK-NEXT:    btsti16 a0, 0
2708; CHECK-NEXT:    mvc32 a0
2709; CHECK-NEXT:    ld16.w a2, (sp, 8)
2710; CHECK-NEXT:    btsti16 a2, 0
2711; CHECK-NEXT:    movf32 a0, a1
2712; CHECK-NEXT:    addi16 sp, sp, 12
2713; CHECK-NEXT:    rts16
2714;
2715; GENERIC-LABEL: ICMP_LONG_slt:
2716; GENERIC:       # %bb.0: # %entry
2717; GENERIC-NEXT:    subi16 sp, sp, 4
2718; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2719; GENERIC-NEXT:    st16.w l0, (sp, 0) # 4-byte Folded Spill
2720; GENERIC-NEXT:    .cfi_offset l0, -4
2721; GENERIC-NEXT:    subi16 sp, sp, 4
2722; GENERIC-NEXT:    .cfi_def_cfa_offset 8
2723; GENERIC-NEXT:    cmplt16 a3, a1
2724; GENERIC-NEXT:    mvcv16 l0
2725; GENERIC-NEXT:    cmphs16 a2, a0
2726; GENERIC-NEXT:    mvcv16 a0
2727; GENERIC-NEXT:    cmpne16 a3, a1
2728; GENERIC-NEXT:    mvcv16 a1
2729; GENERIC-NEXT:    btsti16 a1, 0
2730; GENERIC-NEXT:    bt16 .LBB92_2
2731; GENERIC-NEXT:  # %bb.1: # %entry
2732; GENERIC-NEXT:    movi16 a0, 1
2733; GENERIC-NEXT:    subu16 a0, l0
2734; GENERIC-NEXT:  .LBB92_2: # %entry
2735; GENERIC-NEXT:    addi16 sp, sp, 4
2736; GENERIC-NEXT:    ld16.w l0, (sp, 0) # 4-byte Folded Reload
2737; GENERIC-NEXT:    addi16 sp, sp, 4
2738; GENERIC-NEXT:    rts16
2739entry:
2740  %icmp = icmp slt i64 %y, %x
2741  ret i1 %icmp
2742}
2743
2744define i1 @ICMP_LONG_I_slt(i64 %x) {
2745; CHECK-LABEL: ICMP_LONG_I_slt:
2746; CHECK:       # %bb.0: # %entry
2747; CHECK-NEXT:    .cfi_def_cfa_offset 0
2748; CHECK-NEXT:    subi16 sp, sp, 12
2749; CHECK-NEXT:    .cfi_def_cfa_offset 12
2750; CHECK-NEXT:    movi16 a2, 0
2751; CHECK-NEXT:    cmplt16 a1, a2
2752; CHECK-NEXT:    mvc32 a2
2753; CHECK-NEXT:    st16.w a2, (sp, 4)
2754; CHECK-NEXT:    cmpnei16 a1, 0
2755; CHECK-NEXT:    mvc32 a1
2756; CHECK-NEXT:    st16.w a1, (sp, 8)
2757; CHECK-NEXT:    cmpnei16 a0, 0
2758; CHECK-NEXT:    mvcv16 a1
2759; CHECK-NEXT:    ld16.w a0, (sp, 4)
2760; CHECK-NEXT:    btsti16 a0, 0
2761; CHECK-NEXT:    mvc32 a0
2762; CHECK-NEXT:    ld16.w a2, (sp, 8)
2763; CHECK-NEXT:    btsti16 a2, 0
2764; CHECK-NEXT:    movf32 a0, a1
2765; CHECK-NEXT:    addi16 sp, sp, 12
2766; CHECK-NEXT:    rts16
2767;
2768; GENERIC-LABEL: ICMP_LONG_I_slt:
2769; GENERIC:       # %bb.0: # %entry
2770; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2771; GENERIC-NEXT:    subi16 sp, sp, 4
2772; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2773; GENERIC-NEXT:    movi16 a2, 0
2774; GENERIC-NEXT:    cmplt16 a1, a2
2775; GENERIC-NEXT:    mvcv16 a2
2776; GENERIC-NEXT:    cmpnei16 a0, 0
2777; GENERIC-NEXT:    mvcv16 a0
2778; GENERIC-NEXT:    cmpnei16 a1, 0
2779; GENERIC-NEXT:    mvcv16 a1
2780; GENERIC-NEXT:    btsti16 a1, 0
2781; GENERIC-NEXT:    bt16 .LBB93_2
2782; GENERIC-NEXT:  # %bb.1: # %entry
2783; GENERIC-NEXT:    movi16 a0, 1
2784; GENERIC-NEXT:    subu16 a0, a2
2785; GENERIC-NEXT:  .LBB93_2: # %entry
2786; GENERIC-NEXT:    addi16 sp, sp, 4
2787; GENERIC-NEXT:    rts16
2788entry:
2789  %icmp = icmp slt i64 %x, 1
2790  ret i1 %icmp
2791}
2792
2793define i1 @ICMP_SHORT_slt(i16 %x, i16 %y) {
2794; CHECK-LABEL: ICMP_SHORT_slt:
2795; CHECK:       # %bb.0: # %entry
2796; CHECK-NEXT:    sexth16 a0, a0
2797; CHECK-NEXT:    sexth16 a1, a1
2798; CHECK-NEXT:    cmplt16 a1, a0
2799; CHECK-NEXT:    mvc32 a0
2800; CHECK-NEXT:    rts16
2801;
2802; GENERIC-LABEL: ICMP_SHORT_slt:
2803; GENERIC:       # %bb.0: # %entry
2804; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2805; GENERIC-NEXT:    subi16 sp, sp, 4
2806; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2807; GENERIC-NEXT:    sexth16 a0, a0
2808; GENERIC-NEXT:    sexth16 a1, a1
2809; GENERIC-NEXT:    cmplt16 a1, a0
2810; GENERIC-NEXT:    mvcv16 a1
2811; GENERIC-NEXT:    movi16 a0, 1
2812; GENERIC-NEXT:    subu16 a0, a1
2813; GENERIC-NEXT:    addi16 sp, sp, 4
2814; GENERIC-NEXT:    rts16
2815entry:
2816  %icmp = icmp slt i16 %y, %x
2817  ret i1 %icmp
2818}
2819
2820define i1 @ICMP_SHORT_I_slt(i16 %x) {
2821; CHECK-LABEL: ICMP_SHORT_I_slt:
2822; CHECK:       # %bb.0: # %entry
2823; CHECK-NEXT:    sexth16 a0, a0
2824; CHECK-NEXT:    cmplti16 a0, 1
2825; CHECK-NEXT:    mvc32 a0
2826; CHECK-NEXT:    rts16
2827;
2828; GENERIC-LABEL: ICMP_SHORT_I_slt:
2829; GENERIC:       # %bb.0: # %entry
2830; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2831; GENERIC-NEXT:    subi16 sp, sp, 4
2832; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2833; GENERIC-NEXT:    sexth16 a0, a0
2834; GENERIC-NEXT:    cmplti16 a0, 1
2835; GENERIC-NEXT:    mvcv16 a1
2836; GENERIC-NEXT:    movi16 a0, 1
2837; GENERIC-NEXT:    subu16 a0, a1
2838; GENERIC-NEXT:    addi16 sp, sp, 4
2839; GENERIC-NEXT:    rts16
2840entry:
2841  %icmp = icmp slt i16 %x, 1
2842  ret i1 %icmp
2843}
2844
2845define i1 @ICMP_CHAR_slt(i8 %x, i8 %y) {
2846; CHECK-LABEL: ICMP_CHAR_slt:
2847; CHECK:       # %bb.0: # %entry
2848; CHECK-NEXT:    sextb16 a0, a0
2849; CHECK-NEXT:    sextb16 a1, a1
2850; CHECK-NEXT:    cmplt16 a1, a0
2851; CHECK-NEXT:    mvc32 a0
2852; CHECK-NEXT:    rts16
2853;
2854; GENERIC-LABEL: ICMP_CHAR_slt:
2855; GENERIC:       # %bb.0: # %entry
2856; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2857; GENERIC-NEXT:    subi16 sp, sp, 4
2858; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2859; GENERIC-NEXT:    sextb16 a0, a0
2860; GENERIC-NEXT:    sextb16 a1, a1
2861; GENERIC-NEXT:    cmplt16 a1, a0
2862; GENERIC-NEXT:    mvcv16 a1
2863; GENERIC-NEXT:    movi16 a0, 1
2864; GENERIC-NEXT:    subu16 a0, a1
2865; GENERIC-NEXT:    addi16 sp, sp, 4
2866; GENERIC-NEXT:    rts16
2867entry:
2868  %icmp = icmp slt i8 %y, %x
2869  ret i1 %icmp
2870}
2871
2872define i1 @ICMP_CHAR_I_slt(i8 %x) {
2873; CHECK-LABEL: ICMP_CHAR_I_slt:
2874; CHECK:       # %bb.0: # %entry
2875; CHECK-NEXT:    sextb16 a0, a0
2876; CHECK-NEXT:    cmplti16 a0, 1
2877; CHECK-NEXT:    mvc32 a0
2878; CHECK-NEXT:    rts16
2879;
2880; GENERIC-LABEL: ICMP_CHAR_I_slt:
2881; GENERIC:       # %bb.0: # %entry
2882; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2883; GENERIC-NEXT:    subi16 sp, sp, 4
2884; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2885; GENERIC-NEXT:    sextb16 a0, a0
2886; GENERIC-NEXT:    cmplti16 a0, 1
2887; GENERIC-NEXT:    mvcv16 a1
2888; GENERIC-NEXT:    movi16 a0, 1
2889; GENERIC-NEXT:    subu16 a0, a1
2890; GENERIC-NEXT:    addi16 sp, sp, 4
2891; GENERIC-NEXT:    rts16
2892entry:
2893  %icmp = icmp slt i8 %x, 1
2894  ret i1 %icmp
2895}
2896
2897define i1 @ICMP_BIT_slt(i1 %x, i1 %y) {
2898; CHECK-LABEL: ICMP_BIT_slt:
2899; CHECK:       # %bb.0: # %entry
2900; CHECK-NEXT:    xori32 a0, a0, 1
2901; CHECK-NEXT:    and16 a0, a1
2902; CHECK-NEXT:    rts16
2903;
2904; GENERIC-LABEL: ICMP_BIT_slt:
2905; GENERIC:       # %bb.0: # %entry
2906; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2907; GENERIC-NEXT:    subi16 sp, sp, 4
2908; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2909; GENERIC-NEXT:    movi16 a2, 1
2910; GENERIC-NEXT:    xor16 a0, a2
2911; GENERIC-NEXT:    and16 a0, a1
2912; GENERIC-NEXT:    addi16 sp, sp, 4
2913; GENERIC-NEXT:    rts16
2914entry:
2915  %icmp = icmp slt i1 %y, %x
2916  ret i1 %icmp
2917}
2918
2919define i1 @ICMP_BIT_I_slt(i1 %x) {
2920; CHECK-LABEL: ICMP_BIT_I_slt:
2921; CHECK:       # %bb.0: # %entry
2922; CHECK-NEXT:    movi16 a0, 0
2923; CHECK-NEXT:    rts16
2924;
2925; GENERIC-LABEL: ICMP_BIT_I_slt:
2926; GENERIC:       # %bb.0: # %entry
2927; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2928; GENERIC-NEXT:    subi16 sp, sp, 4
2929; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2930; GENERIC-NEXT:    movi16 a0, 0
2931; GENERIC-NEXT:    addi16 sp, sp, 4
2932; GENERIC-NEXT:    rts16
2933entry:
2934  %icmp = icmp slt i1 %x, 1
2935  ret i1 %icmp
2936}
2937
2938
2939;sle
2940define i1 @icmpRR_sle(i32 %x, i32 %y) {
2941; CHECK-LABEL: icmpRR_sle:
2942; CHECK:       # %bb.0: # %entry
2943; CHECK-NEXT:    cmplt16 a0, a1
2944; CHECK-NEXT:    mvcv16 a0
2945; CHECK-NEXT:    rts16
2946;
2947; GENERIC-LABEL: icmpRR_sle:
2948; GENERIC:       # %bb.0: # %entry
2949; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2950; GENERIC-NEXT:    subi16 sp, sp, 4
2951; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2952; GENERIC-NEXT:    cmplt16 a0, a1
2953; GENERIC-NEXT:    mvcv16 a0
2954; GENERIC-NEXT:    addi16 sp, sp, 4
2955; GENERIC-NEXT:    rts16
2956entry:
2957  %icmp = icmp sle i32 %y, %x
2958  ret i1 %icmp
2959}
2960
2961define i1 @icmpRI_sle(i32 %x) {
2962; CHECK-LABEL: icmpRI_sle:
2963; CHECK:       # %bb.0: # %entry
2964; CHECK-NEXT:    cmplti16 a0, 11
2965; CHECK-NEXT:    mvc32 a0
2966; CHECK-NEXT:    rts16
2967;
2968; GENERIC-LABEL: icmpRI_sle:
2969; GENERIC:       # %bb.0: # %entry
2970; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2971; GENERIC-NEXT:    subi16 sp, sp, 4
2972; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2973; GENERIC-NEXT:    cmplti16 a0, 11
2974; GENERIC-NEXT:    mvcv16 a1
2975; GENERIC-NEXT:    movi16 a0, 1
2976; GENERIC-NEXT:    subu16 a0, a1
2977; GENERIC-NEXT:    addi16 sp, sp, 4
2978; GENERIC-NEXT:    rts16
2979entry:
2980  %icmp = icmp sle i32 %x, 10
2981  ret i1 %icmp
2982}
2983
2984define i1 @icmpRI_X_sle(i32 %x) {
2985; CHECK-LABEL: icmpRI_X_sle:
2986; CHECK:       # %bb.0: # %entry
2987; CHECK-NEXT:    movih32 a1, 62
2988; CHECK-NEXT:    ori32 a1, a1, 33769
2989; CHECK-NEXT:    cmplt16 a0, a1
2990; CHECK-NEXT:    mvc32 a0
2991; CHECK-NEXT:    rts16
2992;
2993; GENERIC-LABEL: icmpRI_X_sle:
2994; GENERIC:       # %bb.0: # %entry
2995; GENERIC-NEXT:    .cfi_def_cfa_offset 0
2996; GENERIC-NEXT:    subi16 sp, sp, 4
2997; GENERIC-NEXT:    .cfi_def_cfa_offset 4
2998; GENERIC-NEXT:    movi16 a1, 0
2999; GENERIC-NEXT:    lsli16 a1, a1, 24
3000; GENERIC-NEXT:    movi16 a2, 62
3001; GENERIC-NEXT:    lsli16 a2, a2, 16
3002; GENERIC-NEXT:    or16 a2, a1
3003; GENERIC-NEXT:    movi16 a1, 131
3004; GENERIC-NEXT:    lsli16 a1, a1, 8
3005; GENERIC-NEXT:    or16 a1, a2
3006; GENERIC-NEXT:    movi16 a2, 233
3007; GENERIC-NEXT:    or16 a2, a1
3008; GENERIC-NEXT:    cmplt16 a0, a2
3009; GENERIC-NEXT:    mvcv16 a1
3010; GENERIC-NEXT:    movi16 a0, 1
3011; GENERIC-NEXT:    subu16 a0, a1
3012; GENERIC-NEXT:    addi16 sp, sp, 4
3013; GENERIC-NEXT:    rts16
3014entry:
3015  %icmp = icmp sle i32 %x, 4097000
3016  ret i1 %icmp
3017}
3018
3019define i1 @ICMP_LONG_sle(i64 %x, i64 %y) {
3020; CHECK-LABEL: ICMP_LONG_sle:
3021; CHECK:       # %bb.0: # %entry
3022; CHECK-NEXT:    .cfi_def_cfa_offset 0
3023; CHECK-NEXT:    subi16 sp, sp, 12
3024; CHECK-NEXT:    .cfi_def_cfa_offset 12
3025; CHECK-NEXT:    cmphs16 a0, a2
3026; CHECK-NEXT:    mvc32 a0
3027; CHECK-NEXT:    st16.w a0, (sp, 4)
3028; CHECK-NEXT:    cmpne16 a3, a1
3029; CHECK-NEXT:    mvc32 a0
3030; CHECK-NEXT:    st16.w a0, (sp, 8)
3031; CHECK-NEXT:    cmplt16 a1, a3
3032; CHECK-NEXT:    mvcv16 a0
3033; CHECK-NEXT:    ld16.w a1, (sp, 4)
3034; CHECK-NEXT:    btsti16 a1, 0
3035; CHECK-NEXT:    mvc32 a1
3036; CHECK-NEXT:    ld16.w a2, (sp, 8)
3037; CHECK-NEXT:    btsti16 a2, 0
3038; CHECK-NEXT:    movf32 a0, a1
3039; CHECK-NEXT:    addi16 sp, sp, 12
3040; CHECK-NEXT:    rts16
3041;
3042; GENERIC-LABEL: ICMP_LONG_sle:
3043; GENERIC:       # %bb.0: # %entry
3044; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3045; GENERIC-NEXT:    subi16 sp, sp, 4
3046; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3047; GENERIC-NEXT:    cmphs16 a0, a2
3048; GENERIC-NEXT:    mvcv16 a2
3049; GENERIC-NEXT:    cmplt16 a1, a3
3050; GENERIC-NEXT:    mvcv16 a0
3051; GENERIC-NEXT:    cmpne16 a3, a1
3052; GENERIC-NEXT:    mvcv16 a1
3053; GENERIC-NEXT:    btsti16 a1, 0
3054; GENERIC-NEXT:    bf16 .LBB103_2
3055; GENERIC-NEXT:  # %bb.1:
3056; GENERIC-NEXT:    movi16 a0, 1
3057; GENERIC-NEXT:    subu16 a0, a2
3058; GENERIC-NEXT:  .LBB103_2: # %entry
3059; GENERIC-NEXT:    addi16 sp, sp, 4
3060; GENERIC-NEXT:    rts16
3061entry:
3062  %icmp = icmp sle i64 %y, %x
3063  ret i1 %icmp
3064}
3065
3066define i1 @ICMP_LONG_I_sle(i64 %x) {
3067; CHECK-LABEL: ICMP_LONG_I_sle:
3068; CHECK:       # %bb.0: # %entry
3069; CHECK-NEXT:    .cfi_def_cfa_offset 0
3070; CHECK-NEXT:    subi16 sp, sp, 12
3071; CHECK-NEXT:    .cfi_def_cfa_offset 12
3072; CHECK-NEXT:    movi16 a2, 0
3073; CHECK-NEXT:    cmplt16 a1, a2
3074; CHECK-NEXT:    mvc32 a2
3075; CHECK-NEXT:    st16.w a2, (sp, 4)
3076; CHECK-NEXT:    cmpnei16 a1, 0
3077; CHECK-NEXT:    mvc32 a1
3078; CHECK-NEXT:    st16.w a1, (sp, 8)
3079; CHECK-NEXT:    cmphsi16 a0, 2
3080; CHECK-NEXT:    mvcv16 a1
3081; CHECK-NEXT:    ld16.w a0, (sp, 4)
3082; CHECK-NEXT:    btsti16 a0, 0
3083; CHECK-NEXT:    mvc32 a0
3084; CHECK-NEXT:    ld16.w a2, (sp, 8)
3085; CHECK-NEXT:    btsti16 a2, 0
3086; CHECK-NEXT:    movf32 a0, a1
3087; CHECK-NEXT:    addi16 sp, sp, 12
3088; CHECK-NEXT:    rts16
3089;
3090; GENERIC-LABEL: ICMP_LONG_I_sle:
3091; GENERIC:       # %bb.0: # %entry
3092; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3093; GENERIC-NEXT:    subi16 sp, sp, 4
3094; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3095; GENERIC-NEXT:    movi16 a2, 0
3096; GENERIC-NEXT:    cmplt16 a1, a2
3097; GENERIC-NEXT:    mvcv16 a2
3098; GENERIC-NEXT:    cmphsi16 a0, 2
3099; GENERIC-NEXT:    mvcv16 a0
3100; GENERIC-NEXT:    cmpnei16 a1, 0
3101; GENERIC-NEXT:    mvcv16 a1
3102; GENERIC-NEXT:    btsti16 a1, 0
3103; GENERIC-NEXT:    bt16 .LBB104_2
3104; GENERIC-NEXT:  # %bb.1: # %entry
3105; GENERIC-NEXT:    movi16 a0, 1
3106; GENERIC-NEXT:    subu16 a0, a2
3107; GENERIC-NEXT:  .LBB104_2: # %entry
3108; GENERIC-NEXT:    addi16 sp, sp, 4
3109; GENERIC-NEXT:    rts16
3110entry:
3111  %icmp = icmp sle i64 %x, 1
3112  ret i1 %icmp
3113}
3114
3115define i1 @ICMP_SHORT_sle(i16 %x, i16 %y) {
3116; CHECK-LABEL: ICMP_SHORT_sle:
3117; CHECK:       # %bb.0: # %entry
3118; CHECK-NEXT:    sexth16 a1, a1
3119; CHECK-NEXT:    sexth16 a0, a0
3120; CHECK-NEXT:    cmplt16 a0, a1
3121; CHECK-NEXT:    mvcv16 a0
3122; CHECK-NEXT:    rts16
3123;
3124; GENERIC-LABEL: ICMP_SHORT_sle:
3125; GENERIC:       # %bb.0: # %entry
3126; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3127; GENERIC-NEXT:    subi16 sp, sp, 4
3128; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3129; GENERIC-NEXT:    sexth16 a1, a1
3130; GENERIC-NEXT:    sexth16 a0, a0
3131; GENERIC-NEXT:    cmplt16 a0, a1
3132; GENERIC-NEXT:    mvcv16 a0
3133; GENERIC-NEXT:    addi16 sp, sp, 4
3134; GENERIC-NEXT:    rts16
3135entry:
3136  %icmp = icmp sle i16 %y, %x
3137  ret i1 %icmp
3138}
3139
3140define i1 @ICMP_SHORT_I_sle(i16 %x) {
3141; CHECK-LABEL: ICMP_SHORT_I_sle:
3142; CHECK:       # %bb.0: # %entry
3143; CHECK-NEXT:    sexth16 a0, a0
3144; CHECK-NEXT:    cmplti16 a0, 2
3145; CHECK-NEXT:    mvc32 a0
3146; CHECK-NEXT:    rts16
3147;
3148; GENERIC-LABEL: ICMP_SHORT_I_sle:
3149; GENERIC:       # %bb.0: # %entry
3150; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3151; GENERIC-NEXT:    subi16 sp, sp, 4
3152; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3153; GENERIC-NEXT:    sexth16 a0, a0
3154; GENERIC-NEXT:    cmplti16 a0, 2
3155; GENERIC-NEXT:    mvcv16 a1
3156; GENERIC-NEXT:    movi16 a0, 1
3157; GENERIC-NEXT:    subu16 a0, a1
3158; GENERIC-NEXT:    addi16 sp, sp, 4
3159; GENERIC-NEXT:    rts16
3160entry:
3161  %icmp = icmp sle i16 %x, 1
3162  ret i1 %icmp
3163}
3164
3165define i1 @ICMP_CHAR_sle(i8 %x, i8 %y) {
3166; CHECK-LABEL: ICMP_CHAR_sle:
3167; CHECK:       # %bb.0: # %entry
3168; CHECK-NEXT:    sextb16 a1, a1
3169; CHECK-NEXT:    sextb16 a0, a0
3170; CHECK-NEXT:    cmplt16 a0, a1
3171; CHECK-NEXT:    mvcv16 a0
3172; CHECK-NEXT:    rts16
3173;
3174; GENERIC-LABEL: ICMP_CHAR_sle:
3175; GENERIC:       # %bb.0: # %entry
3176; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3177; GENERIC-NEXT:    subi16 sp, sp, 4
3178; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3179; GENERIC-NEXT:    sextb16 a1, a1
3180; GENERIC-NEXT:    sextb16 a0, a0
3181; GENERIC-NEXT:    cmplt16 a0, a1
3182; GENERIC-NEXT:    mvcv16 a0
3183; GENERIC-NEXT:    addi16 sp, sp, 4
3184; GENERIC-NEXT:    rts16
3185entry:
3186  %icmp = icmp sle i8 %y, %x
3187  ret i1 %icmp
3188}
3189
3190define i1 @ICMP_CHAR_I_sle(i8 %x) {
3191; CHECK-LABEL: ICMP_CHAR_I_sle:
3192; CHECK:       # %bb.0: # %entry
3193; CHECK-NEXT:    sextb16 a0, a0
3194; CHECK-NEXT:    cmplti16 a0, 2
3195; CHECK-NEXT:    mvc32 a0
3196; CHECK-NEXT:    rts16
3197;
3198; GENERIC-LABEL: ICMP_CHAR_I_sle:
3199; GENERIC:       # %bb.0: # %entry
3200; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3201; GENERIC-NEXT:    subi16 sp, sp, 4
3202; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3203; GENERIC-NEXT:    sextb16 a0, a0
3204; GENERIC-NEXT:    cmplti16 a0, 2
3205; GENERIC-NEXT:    mvcv16 a1
3206; GENERIC-NEXT:    movi16 a0, 1
3207; GENERIC-NEXT:    subu16 a0, a1
3208; GENERIC-NEXT:    addi16 sp, sp, 4
3209; GENERIC-NEXT:    rts16
3210entry:
3211  %icmp = icmp sle i8 %x, 1
3212  ret i1 %icmp
3213}
3214
3215define i1 @ICMP_BIT_sle(i1 %x, i1 %y) {
3216; CHECK-LABEL: ICMP_BIT_sle:
3217; CHECK:       # %bb.0: # %entry
3218; CHECK-NEXT:    xori32 a0, a0, 1
3219; CHECK-NEXT:    or16 a0, a1
3220; CHECK-NEXT:    rts16
3221;
3222; GENERIC-LABEL: ICMP_BIT_sle:
3223; GENERIC:       # %bb.0: # %entry
3224; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3225; GENERIC-NEXT:    subi16 sp, sp, 4
3226; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3227; GENERIC-NEXT:    movi16 a2, 1
3228; GENERIC-NEXT:    xor16 a0, a2
3229; GENERIC-NEXT:    or16 a0, a1
3230; GENERIC-NEXT:    addi16 sp, sp, 4
3231; GENERIC-NEXT:    rts16
3232entry:
3233  %icmp = icmp sle i1 %y, %x
3234  ret i1 %icmp
3235}
3236
3237define i1 @ICMP_BIT_I_sle(i1 %x) {
3238; CHECK-LABEL: ICMP_BIT_I_sle:
3239; CHECK:       # %bb.0: # %entry
3240; CHECK-NEXT:    rts16
3241;
3242; GENERIC-LABEL: ICMP_BIT_I_sle:
3243; GENERIC:       # %bb.0: # %entry
3244; GENERIC-NEXT:    .cfi_def_cfa_offset 0
3245; GENERIC-NEXT:    subi16 sp, sp, 4
3246; GENERIC-NEXT:    .cfi_def_cfa_offset 4
3247; GENERIC-NEXT:    addi16 sp, sp, 4
3248; GENERIC-NEXT:    rts16
3249entry:
3250  %icmp = icmp sle i1 %x, 1
3251  ret i1 %icmp
3252}
3253