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