xref: /llvm-project/llvm/test/Transforms/InstSimplify/icmp-ranges.ll (revision 11b41910dd9ffbc1bffcc818be2de0174eac1e1b)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=instsimplify -S | FileCheck %s
3
4; Cycle through all pairs of predicates to test
5; simplification of range-intersection or range-union.
6
7; eq
8; x == 13 && x == 17
9
10define i1 @and_eq_eq(i8 %x) {
11; CHECK-LABEL: @and_eq_eq(
12; CHECK-NEXT:    ret i1 false
13;
14  %a = icmp eq i8 %x, 13
15  %b = icmp eq i8 %x, 17
16  %c = and i1 %a, %b
17  ret i1 %c
18}
19
20; x == 13 && x != 17
21
22define i1 @and_eq_ne(i8 %x) {
23; CHECK-LABEL: @and_eq_ne(
24; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
25; CHECK-NEXT:    ret i1 [[A]]
26;
27  %a = icmp eq i8 %x, 13
28  %b = icmp ne i8 %x, 17
29  %c = and i1 %a, %b
30  ret i1 %c
31}
32
33; x == 13 && x >=s 17
34
35define i1 @and_eq_sge(i8 %x) {
36; CHECK-LABEL: @and_eq_sge(
37; CHECK-NEXT:    ret i1 false
38;
39  %a = icmp eq i8 %x, 13
40  %b = icmp sge i8 %x, 17
41  %c = and i1 %a, %b
42  ret i1 %c
43}
44
45; x == 13 && x >s 17
46
47define i1 @and_eq_sgt(i8 %x) {
48; CHECK-LABEL: @and_eq_sgt(
49; CHECK-NEXT:    ret i1 false
50;
51  %a = icmp eq i8 %x, 13
52  %b = icmp sgt i8 %x, 17
53  %c = and i1 %a, %b
54  ret i1 %c
55}
56
57; x == 13 && x <=s 17
58
59define i1 @and_eq_sle(i8 %x) {
60; CHECK-LABEL: @and_eq_sle(
61; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
62; CHECK-NEXT:    ret i1 [[A]]
63;
64  %a = icmp eq i8 %x, 13
65  %b = icmp sle i8 %x, 17
66  %c = and i1 %a, %b
67  ret i1 %c
68}
69
70; x == 13 && x <s 17
71
72define i1 @and_eq_slt(i8 %x) {
73; CHECK-LABEL: @and_eq_slt(
74; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
75; CHECK-NEXT:    ret i1 [[A]]
76;
77  %a = icmp eq i8 %x, 13
78  %b = icmp slt i8 %x, 17
79  %c = and i1 %a, %b
80  ret i1 %c
81}
82
83; x == 13 && x >=u 17
84
85define i1 @and_eq_uge(i8 %x) {
86; CHECK-LABEL: @and_eq_uge(
87; CHECK-NEXT:    ret i1 false
88;
89  %a = icmp eq i8 %x, 13
90  %b = icmp uge i8 %x, 17
91  %c = and i1 %a, %b
92  ret i1 %c
93}
94
95; x == 13 && x >u 17
96
97define i1 @and_eq_ugt(i8 %x) {
98; CHECK-LABEL: @and_eq_ugt(
99; CHECK-NEXT:    ret i1 false
100;
101  %a = icmp eq i8 %x, 13
102  %b = icmp ugt i8 %x, 17
103  %c = and i1 %a, %b
104  ret i1 %c
105}
106
107; x == 13 && x <=u 17
108
109define i1 @and_eq_ule(i8 %x) {
110; CHECK-LABEL: @and_eq_ule(
111; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
112; CHECK-NEXT:    ret i1 [[A]]
113;
114  %a = icmp eq i8 %x, 13
115  %b = icmp ule i8 %x, 17
116  %c = and i1 %a, %b
117  ret i1 %c
118}
119
120; x == 13 && x <u 17
121
122define i1 @and_eq_ult(i8 %x) {
123; CHECK-LABEL: @and_eq_ult(
124; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
125; CHECK-NEXT:    ret i1 [[A]]
126;
127  %a = icmp eq i8 %x, 13
128  %b = icmp ult i8 %x, 17
129  %c = and i1 %a, %b
130  ret i1 %c
131}
132
133; ne
134; x != 13 && x == 17
135
136define i1 @and_ne_eq(i8 %x) {
137; CHECK-LABEL: @and_ne_eq(
138; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
139; CHECK-NEXT:    ret i1 [[B]]
140;
141  %a = icmp ne i8 %x, 13
142  %b = icmp eq i8 %x, 17
143  %c = and i1 %a, %b
144  ret i1 %c
145}
146
147; x != 13 && x != 17
148
149define i1 @and_ne_ne(i8 %x) {
150; CHECK-LABEL: @and_ne_ne(
151; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
152; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
153; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
154; CHECK-NEXT:    ret i1 [[C]]
155;
156  %a = icmp ne i8 %x, 13
157  %b = icmp ne i8 %x, 17
158  %c = and i1 %a, %b
159  ret i1 %c
160}
161
162; x != 13 && x >=s 17
163
164define i1 @and_ne_sge(i8 %x) {
165; CHECK-LABEL: @and_ne_sge(
166; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
167; CHECK-NEXT:    ret i1 [[B]]
168;
169  %a = icmp ne i8 %x, 13
170  %b = icmp sge i8 %x, 17
171  %c = and i1 %a, %b
172  ret i1 %c
173}
174
175; x != 13 && x >s 17
176
177define i1 @and_ne_sgt(i8 %x) {
178; CHECK-LABEL: @and_ne_sgt(
179; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
180; CHECK-NEXT:    ret i1 [[B]]
181;
182  %a = icmp ne i8 %x, 13
183  %b = icmp sgt i8 %x, 17
184  %c = and i1 %a, %b
185  ret i1 %c
186}
187
188; x != 13 && x <=s 17
189
190define i1 @and_ne_sle(i8 %x) {
191; CHECK-LABEL: @and_ne_sle(
192; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
193; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
194; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
195; CHECK-NEXT:    ret i1 [[C]]
196;
197  %a = icmp ne i8 %x, 13
198  %b = icmp sle i8 %x, 17
199  %c = and i1 %a, %b
200  ret i1 %c
201}
202
203; x != 13 && x <s 17
204
205define i1 @and_ne_slt(i8 %x) {
206; CHECK-LABEL: @and_ne_slt(
207; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
208; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
209; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
210; CHECK-NEXT:    ret i1 [[C]]
211;
212  %a = icmp ne i8 %x, 13
213  %b = icmp slt i8 %x, 17
214  %c = and i1 %a, %b
215  ret i1 %c
216}
217
218; x != 13 && x >=u 17
219
220define i1 @and_ne_uge(i8 %x) {
221; CHECK-LABEL: @and_ne_uge(
222; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
223; CHECK-NEXT:    ret i1 [[B]]
224;
225  %a = icmp ne i8 %x, 13
226  %b = icmp uge i8 %x, 17
227  %c = and i1 %a, %b
228  ret i1 %c
229}
230
231; x != 13 && x >u 17
232
233define i1 @and_ne_ugt(i8 %x) {
234; CHECK-LABEL: @and_ne_ugt(
235; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
236; CHECK-NEXT:    ret i1 [[B]]
237;
238  %a = icmp ne i8 %x, 13
239  %b = icmp ugt i8 %x, 17
240  %c = and i1 %a, %b
241  ret i1 %c
242}
243
244; x != 13 && x <=u 17
245
246define i1 @and_ne_ule(i8 %x) {
247; CHECK-LABEL: @and_ne_ule(
248; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
249; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
250; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
251; CHECK-NEXT:    ret i1 [[C]]
252;
253  %a = icmp ne i8 %x, 13
254  %b = icmp ule i8 %x, 17
255  %c = and i1 %a, %b
256  ret i1 %c
257}
258
259; x != 13 && x <u 17
260
261define i1 @and_ne_ult(i8 %x) {
262; CHECK-LABEL: @and_ne_ult(
263; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
264; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
265; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
266; CHECK-NEXT:    ret i1 [[C]]
267;
268  %a = icmp ne i8 %x, 13
269  %b = icmp ult i8 %x, 17
270  %c = and i1 %a, %b
271  ret i1 %c
272}
273
274; sge
275; x >=s 13 && x == 17
276
277define i1 @and_sge_eq(i8 %x) {
278; CHECK-LABEL: @and_sge_eq(
279; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
280; CHECK-NEXT:    ret i1 [[B]]
281;
282  %a = icmp sge i8 %x, 13
283  %b = icmp eq i8 %x, 17
284  %c = and i1 %a, %b
285  ret i1 %c
286}
287
288; x >=s 13 && x != 17
289
290define i1 @and_sge_ne(i8 %x) {
291; CHECK-LABEL: @and_sge_ne(
292; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
293; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
294; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
295; CHECK-NEXT:    ret i1 [[C]]
296;
297  %a = icmp sge i8 %x, 13
298  %b = icmp ne i8 %x, 17
299  %c = and i1 %a, %b
300  ret i1 %c
301}
302
303; x >=s 13 && x >=s 17
304
305define i1 @and_sge_sge(i8 %x) {
306; CHECK-LABEL: @and_sge_sge(
307; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
308; CHECK-NEXT:    ret i1 [[B]]
309;
310  %a = icmp sge i8 %x, 13
311  %b = icmp sge i8 %x, 17
312  %c = and i1 %a, %b
313  ret i1 %c
314}
315
316; x >=s 13 && x >s 17
317
318define i1 @and_sge_sgt(i8 %x) {
319; CHECK-LABEL: @and_sge_sgt(
320; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
321; CHECK-NEXT:    ret i1 [[B]]
322;
323  %a = icmp sge i8 %x, 13
324  %b = icmp sgt i8 %x, 17
325  %c = and i1 %a, %b
326  ret i1 %c
327}
328
329; x >=s 13 && x <=s 17
330
331define i1 @and_sge_sle(i8 %x) {
332; CHECK-LABEL: @and_sge_sle(
333; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
334; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
335; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
336; CHECK-NEXT:    ret i1 [[C]]
337;
338  %a = icmp sge i8 %x, 13
339  %b = icmp sle i8 %x, 17
340  %c = and i1 %a, %b
341  ret i1 %c
342}
343
344; x >=s 13 && x <s 17
345
346define i1 @and_sge_slt(i8 %x) {
347; CHECK-LABEL: @and_sge_slt(
348; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
349; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
350; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
351; CHECK-NEXT:    ret i1 [[C]]
352;
353  %a = icmp sge i8 %x, 13
354  %b = icmp slt i8 %x, 17
355  %c = and i1 %a, %b
356  ret i1 %c
357}
358
359; x >=s 13 && x >=u 17
360
361define i1 @and_sge_uge(i8 %x) {
362; CHECK-LABEL: @and_sge_uge(
363; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
364; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
365; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
366; CHECK-NEXT:    ret i1 [[C]]
367;
368  %a = icmp sge i8 %x, 13
369  %b = icmp uge i8 %x, 17
370  %c = and i1 %a, %b
371  ret i1 %c
372}
373
374; x >=s 13 && x >u 17
375
376define i1 @and_sge_ugt(i8 %x) {
377; CHECK-LABEL: @and_sge_ugt(
378; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
379; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
380; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
381; CHECK-NEXT:    ret i1 [[C]]
382;
383  %a = icmp sge i8 %x, 13
384  %b = icmp ugt i8 %x, 17
385  %c = and i1 %a, %b
386  ret i1 %c
387}
388
389; x >=s 13 && x <=u 17
390
391define i1 @and_sge_ule(i8 %x) {
392; CHECK-LABEL: @and_sge_ule(
393; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
394; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
395; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
396; CHECK-NEXT:    ret i1 [[C]]
397;
398  %a = icmp sge i8 %x, 13
399  %b = icmp ule i8 %x, 17
400  %c = and i1 %a, %b
401  ret i1 %c
402}
403
404; x >=s 13 && x <u 17
405
406define i1 @and_sge_ult(i8 %x) {
407; CHECK-LABEL: @and_sge_ult(
408; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
409; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
410; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
411; CHECK-NEXT:    ret i1 [[C]]
412;
413  %a = icmp sge i8 %x, 13
414  %b = icmp ult i8 %x, 17
415  %c = and i1 %a, %b
416  ret i1 %c
417}
418
419; sgt
420; x >s 13 && x == 17
421
422define i1 @and_sgt_eq(i8 %x) {
423; CHECK-LABEL: @and_sgt_eq(
424; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
425; CHECK-NEXT:    ret i1 [[B]]
426;
427  %a = icmp sgt i8 %x, 13
428  %b = icmp eq i8 %x, 17
429  %c = and i1 %a, %b
430  ret i1 %c
431}
432
433; x >s 13 && x != 17
434
435define i1 @and_sgt_ne(i8 %x) {
436; CHECK-LABEL: @and_sgt_ne(
437; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
438; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
439; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
440; CHECK-NEXT:    ret i1 [[C]]
441;
442  %a = icmp sgt i8 %x, 13
443  %b = icmp ne i8 %x, 17
444  %c = and i1 %a, %b
445  ret i1 %c
446}
447
448; x >s 13 && x >=s 17
449
450define i1 @and_sgt_sge(i8 %x) {
451; CHECK-LABEL: @and_sgt_sge(
452; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
453; CHECK-NEXT:    ret i1 [[B]]
454;
455  %a = icmp sgt i8 %x, 13
456  %b = icmp sge i8 %x, 17
457  %c = and i1 %a, %b
458  ret i1 %c
459}
460
461; x >s 13 && x >s 17
462
463define i1 @and_sgt_sgt(i8 %x) {
464; CHECK-LABEL: @and_sgt_sgt(
465; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
466; CHECK-NEXT:    ret i1 [[B]]
467;
468  %a = icmp sgt i8 %x, 13
469  %b = icmp sgt i8 %x, 17
470  %c = and i1 %a, %b
471  ret i1 %c
472}
473
474; x >s 13 && x <=s 17
475
476define i1 @and_sgt_sle(i8 %x) {
477; CHECK-LABEL: @and_sgt_sle(
478; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
479; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
480; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
481; CHECK-NEXT:    ret i1 [[C]]
482;
483  %a = icmp sgt i8 %x, 13
484  %b = icmp sle i8 %x, 17
485  %c = and i1 %a, %b
486  ret i1 %c
487}
488
489; x >s 13 && x <s 17
490
491define i1 @and_sgt_slt(i8 %x) {
492; CHECK-LABEL: @and_sgt_slt(
493; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
494; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
495; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
496; CHECK-NEXT:    ret i1 [[C]]
497;
498  %a = icmp sgt i8 %x, 13
499  %b = icmp slt i8 %x, 17
500  %c = and i1 %a, %b
501  ret i1 %c
502}
503
504; x >s 13 && x >=u 17
505
506define i1 @and_sgt_uge(i8 %x) {
507; CHECK-LABEL: @and_sgt_uge(
508; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
509; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
510; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
511; CHECK-NEXT:    ret i1 [[C]]
512;
513  %a = icmp sgt i8 %x, 13
514  %b = icmp uge i8 %x, 17
515  %c = and i1 %a, %b
516  ret i1 %c
517}
518
519; x >s 13 && x >u 17
520
521define i1 @and_sgt_ugt(i8 %x) {
522; CHECK-LABEL: @and_sgt_ugt(
523; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
524; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
525; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
526; CHECK-NEXT:    ret i1 [[C]]
527;
528  %a = icmp sgt i8 %x, 13
529  %b = icmp ugt i8 %x, 17
530  %c = and i1 %a, %b
531  ret i1 %c
532}
533
534; x >s 13 && x <=u 17
535
536define i1 @and_sgt_ule(i8 %x) {
537; CHECK-LABEL: @and_sgt_ule(
538; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
539; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
540; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
541; CHECK-NEXT:    ret i1 [[C]]
542;
543  %a = icmp sgt i8 %x, 13
544  %b = icmp ule i8 %x, 17
545  %c = and i1 %a, %b
546  ret i1 %c
547}
548
549; x >s 13 && x <u 17
550
551define i1 @and_sgt_ult(i8 %x) {
552; CHECK-LABEL: @and_sgt_ult(
553; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
554; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
555; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
556; CHECK-NEXT:    ret i1 [[C]]
557;
558  %a = icmp sgt i8 %x, 13
559  %b = icmp ult i8 %x, 17
560  %c = and i1 %a, %b
561  ret i1 %c
562}
563
564; sle
565; x <=s 13 && x == 17
566
567define i1 @and_sle_eq(i8 %x) {
568; CHECK-LABEL: @and_sle_eq(
569; CHECK-NEXT:    ret i1 false
570;
571  %a = icmp sle i8 %x, 13
572  %b = icmp eq i8 %x, 17
573  %c = and i1 %a, %b
574  ret i1 %c
575}
576
577; x <=s 13 && x != 17
578
579define i1 @and_sle_ne(i8 %x) {
580; CHECK-LABEL: @and_sle_ne(
581; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
582; CHECK-NEXT:    ret i1 [[A]]
583;
584  %a = icmp sle i8 %x, 13
585  %b = icmp ne i8 %x, 17
586  %c = and i1 %a, %b
587  ret i1 %c
588}
589
590; x <=s 13 && x >=s 17
591
592define i1 @and_sle_sge(i8 %x) {
593; CHECK-LABEL: @and_sle_sge(
594; CHECK-NEXT:    ret i1 false
595;
596  %a = icmp sle i8 %x, 13
597  %b = icmp sge i8 %x, 17
598  %c = and i1 %a, %b
599  ret i1 %c
600}
601
602; x <=s 13 && x >s 17
603
604define i1 @and_sle_sgt(i8 %x) {
605; CHECK-LABEL: @and_sle_sgt(
606; CHECK-NEXT:    ret i1 false
607;
608  %a = icmp sle i8 %x, 13
609  %b = icmp sgt i8 %x, 17
610  %c = and i1 %a, %b
611  ret i1 %c
612}
613
614; x <=s 13 && x <=s 17
615
616define i1 @and_sle_sle(i8 %x) {
617; CHECK-LABEL: @and_sle_sle(
618; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
619; CHECK-NEXT:    ret i1 [[A]]
620;
621  %a = icmp sle i8 %x, 13
622  %b = icmp sle i8 %x, 17
623  %c = and i1 %a, %b
624  ret i1 %c
625}
626
627; x <=s 13 && x <s 17
628
629define i1 @and_sle_slt(i8 %x) {
630; CHECK-LABEL: @and_sle_slt(
631; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
632; CHECK-NEXT:    ret i1 [[A]]
633;
634  %a = icmp sle i8 %x, 13
635  %b = icmp slt i8 %x, 17
636  %c = and i1 %a, %b
637  ret i1 %c
638}
639
640; x <=s 13 && x >=u 17
641
642define i1 @and_sle_uge(i8 %x) {
643; CHECK-LABEL: @and_sle_uge(
644; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
645; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
646; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
647; CHECK-NEXT:    ret i1 [[C]]
648;
649  %a = icmp sle i8 %x, 13
650  %b = icmp uge i8 %x, 17
651  %c = and i1 %a, %b
652  ret i1 %c
653}
654
655; x <=s 13 && x >u 17
656
657define i1 @and_sle_ugt(i8 %x) {
658; CHECK-LABEL: @and_sle_ugt(
659; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
660; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
661; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
662; CHECK-NEXT:    ret i1 [[C]]
663;
664  %a = icmp sle i8 %x, 13
665  %b = icmp ugt i8 %x, 17
666  %c = and i1 %a, %b
667  ret i1 %c
668}
669
670; x <=s 13 && x <=u 17
671
672define i1 @and_sle_ule(i8 %x) {
673; CHECK-LABEL: @and_sle_ule(
674; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
675; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
676; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
677; CHECK-NEXT:    ret i1 [[C]]
678;
679  %a = icmp sle i8 %x, 13
680  %b = icmp ule i8 %x, 17
681  %c = and i1 %a, %b
682  ret i1 %c
683}
684
685; x <=s 13 && x <u 17
686
687define i1 @and_sle_ult(i8 %x) {
688; CHECK-LABEL: @and_sle_ult(
689; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
690; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
691; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
692; CHECK-NEXT:    ret i1 [[C]]
693;
694  %a = icmp sle i8 %x, 13
695  %b = icmp ult i8 %x, 17
696  %c = and i1 %a, %b
697  ret i1 %c
698}
699
700; slt
701; x <s 13 && x == 17
702
703define i1 @and_slt_eq(i8 %x) {
704; CHECK-LABEL: @and_slt_eq(
705; CHECK-NEXT:    ret i1 false
706;
707  %a = icmp slt i8 %x, 13
708  %b = icmp eq i8 %x, 17
709  %c = and i1 %a, %b
710  ret i1 %c
711}
712
713; x <s 13 && x != 17
714
715define i1 @and_slt_ne(i8 %x) {
716; CHECK-LABEL: @and_slt_ne(
717; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
718; CHECK-NEXT:    ret i1 [[A]]
719;
720  %a = icmp slt i8 %x, 13
721  %b = icmp ne i8 %x, 17
722  %c = and i1 %a, %b
723  ret i1 %c
724}
725
726; x <s 13 && x >=s 17
727
728define i1 @and_slt_sge(i8 %x) {
729; CHECK-LABEL: @and_slt_sge(
730; CHECK-NEXT:    ret i1 false
731;
732  %a = icmp slt i8 %x, 13
733  %b = icmp sge i8 %x, 17
734  %c = and i1 %a, %b
735  ret i1 %c
736}
737
738; x <s 13 && x >s 17
739
740define i1 @and_slt_sgt(i8 %x) {
741; CHECK-LABEL: @and_slt_sgt(
742; CHECK-NEXT:    ret i1 false
743;
744  %a = icmp slt i8 %x, 13
745  %b = icmp sgt i8 %x, 17
746  %c = and i1 %a, %b
747  ret i1 %c
748}
749
750; x <s 13 && x <=s 17
751
752define i1 @and_slt_sle(i8 %x) {
753; CHECK-LABEL: @and_slt_sle(
754; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
755; CHECK-NEXT:    ret i1 [[A]]
756;
757  %a = icmp slt i8 %x, 13
758  %b = icmp sle i8 %x, 17
759  %c = and i1 %a, %b
760  ret i1 %c
761}
762
763; x <s 13 && x <s 17
764
765define i1 @and_slt_slt(i8 %x) {
766; CHECK-LABEL: @and_slt_slt(
767; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
768; CHECK-NEXT:    ret i1 [[A]]
769;
770  %a = icmp slt i8 %x, 13
771  %b = icmp slt i8 %x, 17
772  %c = and i1 %a, %b
773  ret i1 %c
774}
775
776; x <s 13 && x >=u 17
777
778define i1 @and_slt_uge(i8 %x) {
779; CHECK-LABEL: @and_slt_uge(
780; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
781; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
782; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
783; CHECK-NEXT:    ret i1 [[C]]
784;
785  %a = icmp slt i8 %x, 13
786  %b = icmp uge i8 %x, 17
787  %c = and i1 %a, %b
788  ret i1 %c
789}
790
791; x <s 13 && x >u 17
792
793define i1 @and_slt_ugt(i8 %x) {
794; CHECK-LABEL: @and_slt_ugt(
795; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
796; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
797; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
798; CHECK-NEXT:    ret i1 [[C]]
799;
800  %a = icmp slt i8 %x, 13
801  %b = icmp ugt i8 %x, 17
802  %c = and i1 %a, %b
803  ret i1 %c
804}
805
806; x <s 13 && x <=u 17
807
808define i1 @and_slt_ule(i8 %x) {
809; CHECK-LABEL: @and_slt_ule(
810; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
811; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
812; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
813; CHECK-NEXT:    ret i1 [[C]]
814;
815  %a = icmp slt i8 %x, 13
816  %b = icmp ule i8 %x, 17
817  %c = and i1 %a, %b
818  ret i1 %c
819}
820
821; x <s 13 && x <u 17
822
823define i1 @and_slt_ult(i8 %x) {
824; CHECK-LABEL: @and_slt_ult(
825; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
826; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
827; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
828; CHECK-NEXT:    ret i1 [[C]]
829;
830  %a = icmp slt i8 %x, 13
831  %b = icmp ult i8 %x, 17
832  %c = and i1 %a, %b
833  ret i1 %c
834}
835
836; uge
837; x >=u 13 && x == 17
838
839define i1 @and_uge_eq(i8 %x) {
840; CHECK-LABEL: @and_uge_eq(
841; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
842; CHECK-NEXT:    ret i1 [[B]]
843;
844  %a = icmp uge i8 %x, 13
845  %b = icmp eq i8 %x, 17
846  %c = and i1 %a, %b
847  ret i1 %c
848}
849
850; x >=u 13 && x != 17
851
852define i1 @and_uge_ne(i8 %x) {
853; CHECK-LABEL: @and_uge_ne(
854; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
855; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
856; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
857; CHECK-NEXT:    ret i1 [[C]]
858;
859  %a = icmp uge i8 %x, 13
860  %b = icmp ne i8 %x, 17
861  %c = and i1 %a, %b
862  ret i1 %c
863}
864
865; x >=u 13 && x >=s 17
866
867define i1 @and_uge_sge(i8 %x) {
868; CHECK-LABEL: @and_uge_sge(
869; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
870; CHECK-NEXT:    ret i1 [[B]]
871;
872  %a = icmp uge i8 %x, 13
873  %b = icmp sge i8 %x, 17
874  %c = and i1 %a, %b
875  ret i1 %c
876}
877
878; x >=u 13 && x >s 17
879
880define i1 @and_uge_sgt(i8 %x) {
881; CHECK-LABEL: @and_uge_sgt(
882; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
883; CHECK-NEXT:    ret i1 [[B]]
884;
885  %a = icmp uge i8 %x, 13
886  %b = icmp sgt i8 %x, 17
887  %c = and i1 %a, %b
888  ret i1 %c
889}
890
891; x >=u 13 && x <=s 17
892
893define i1 @and_uge_sle(i8 %x) {
894; CHECK-LABEL: @and_uge_sle(
895; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
896; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
897; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
898; CHECK-NEXT:    ret i1 [[C]]
899;
900  %a = icmp uge i8 %x, 13
901  %b = icmp sle i8 %x, 17
902  %c = and i1 %a, %b
903  ret i1 %c
904}
905
906; x >=u 13 && x <s 17
907
908define i1 @and_uge_slt(i8 %x) {
909; CHECK-LABEL: @and_uge_slt(
910; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
911; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
912; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
913; CHECK-NEXT:    ret i1 [[C]]
914;
915  %a = icmp uge i8 %x, 13
916  %b = icmp slt i8 %x, 17
917  %c = and i1 %a, %b
918  ret i1 %c
919}
920
921; x >=u 13 && x >=u 17
922
923define i1 @and_uge_uge(i8 %x) {
924; CHECK-LABEL: @and_uge_uge(
925; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
926; CHECK-NEXT:    ret i1 [[B]]
927;
928  %a = icmp uge i8 %x, 13
929  %b = icmp uge i8 %x, 17
930  %c = and i1 %a, %b
931  ret i1 %c
932}
933
934; x >=u 13 && x >u 17
935
936define i1 @and_uge_ugt(i8 %x) {
937; CHECK-LABEL: @and_uge_ugt(
938; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
939; CHECK-NEXT:    ret i1 [[B]]
940;
941  %a = icmp uge i8 %x, 13
942  %b = icmp ugt i8 %x, 17
943  %c = and i1 %a, %b
944  ret i1 %c
945}
946
947; x >=u 13 && x <=u 17
948
949define i1 @and_uge_ule(i8 %x) {
950; CHECK-LABEL: @and_uge_ule(
951; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
952; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
953; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
954; CHECK-NEXT:    ret i1 [[C]]
955;
956  %a = icmp uge i8 %x, 13
957  %b = icmp ule i8 %x, 17
958  %c = and i1 %a, %b
959  ret i1 %c
960}
961
962; x >=u 13 && x <u 17
963
964define i1 @and_uge_ult(i8 %x) {
965; CHECK-LABEL: @and_uge_ult(
966; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
967; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
968; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
969; CHECK-NEXT:    ret i1 [[C]]
970;
971  %a = icmp uge i8 %x, 13
972  %b = icmp ult i8 %x, 17
973  %c = and i1 %a, %b
974  ret i1 %c
975}
976
977; ugt
978; x >u 13 && x == 17
979
980define i1 @and_ugt_eq(i8 %x) {
981; CHECK-LABEL: @and_ugt_eq(
982; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
983; CHECK-NEXT:    ret i1 [[B]]
984;
985  %a = icmp ugt i8 %x, 13
986  %b = icmp eq i8 %x, 17
987  %c = and i1 %a, %b
988  ret i1 %c
989}
990
991; x >u 13 && x != 17
992
993define i1 @and_ugt_ne(i8 %x) {
994; CHECK-LABEL: @and_ugt_ne(
995; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
996; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
997; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
998; CHECK-NEXT:    ret i1 [[C]]
999;
1000  %a = icmp ugt i8 %x, 13
1001  %b = icmp ne i8 %x, 17
1002  %c = and i1 %a, %b
1003  ret i1 %c
1004}
1005
1006; x >u 13 && x >=s 17
1007
1008define i1 @and_ugt_sge(i8 %x) {
1009; CHECK-LABEL: @and_ugt_sge(
1010; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
1011; CHECK-NEXT:    ret i1 [[B]]
1012;
1013  %a = icmp ugt i8 %x, 13
1014  %b = icmp sge i8 %x, 17
1015  %c = and i1 %a, %b
1016  ret i1 %c
1017}
1018
1019; x >u 13 && x >s 17
1020
1021define i1 @and_ugt_sgt(i8 %x) {
1022; CHECK-LABEL: @and_ugt_sgt(
1023; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
1024; CHECK-NEXT:    ret i1 [[B]]
1025;
1026  %a = icmp ugt i8 %x, 13
1027  %b = icmp sgt i8 %x, 17
1028  %c = and i1 %a, %b
1029  ret i1 %c
1030}
1031
1032; x >u 13 && x <=s 17
1033
1034define i1 @and_ugt_sle(i8 %x) {
1035; CHECK-LABEL: @and_ugt_sle(
1036; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
1037; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
1038; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1039; CHECK-NEXT:    ret i1 [[C]]
1040;
1041  %a = icmp ugt i8 %x, 13
1042  %b = icmp sle i8 %x, 17
1043  %c = and i1 %a, %b
1044  ret i1 %c
1045}
1046
1047; x >u 13 && x <s 17
1048
1049define i1 @and_ugt_slt(i8 %x) {
1050; CHECK-LABEL: @and_ugt_slt(
1051; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
1052; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
1053; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1054; CHECK-NEXT:    ret i1 [[C]]
1055;
1056  %a = icmp ugt i8 %x, 13
1057  %b = icmp slt i8 %x, 17
1058  %c = and i1 %a, %b
1059  ret i1 %c
1060}
1061
1062; x >u 13 && x >=u 17
1063
1064define i1 @and_ugt_uge(i8 %x) {
1065; CHECK-LABEL: @and_ugt_uge(
1066; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
1067; CHECK-NEXT:    ret i1 [[B]]
1068;
1069  %a = icmp ugt i8 %x, 13
1070  %b = icmp uge i8 %x, 17
1071  %c = and i1 %a, %b
1072  ret i1 %c
1073}
1074
1075; x >u 13 && x >u 17
1076
1077define i1 @and_ugt_ugt(i8 %x) {
1078; CHECK-LABEL: @and_ugt_ugt(
1079; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
1080; CHECK-NEXT:    ret i1 [[B]]
1081;
1082  %a = icmp ugt i8 %x, 13
1083  %b = icmp ugt i8 %x, 17
1084  %c = and i1 %a, %b
1085  ret i1 %c
1086}
1087
1088; x >u 13 && x <=u 17
1089
1090define i1 @and_ugt_ule(i8 %x) {
1091; CHECK-LABEL: @and_ugt_ule(
1092; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
1093; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
1094; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1095; CHECK-NEXT:    ret i1 [[C]]
1096;
1097  %a = icmp ugt i8 %x, 13
1098  %b = icmp ule i8 %x, 17
1099  %c = and i1 %a, %b
1100  ret i1 %c
1101}
1102
1103; x >u 13 && x <u 17
1104
1105define i1 @and_ugt_ult(i8 %x) {
1106; CHECK-LABEL: @and_ugt_ult(
1107; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
1108; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
1109; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1110; CHECK-NEXT:    ret i1 [[C]]
1111;
1112  %a = icmp ugt i8 %x, 13
1113  %b = icmp ult i8 %x, 17
1114  %c = and i1 %a, %b
1115  ret i1 %c
1116}
1117
1118; ule
1119; x <=u 13 && x == 17
1120
1121define i1 @and_ule_eq(i8 %x) {
1122; CHECK-LABEL: @and_ule_eq(
1123; CHECK-NEXT:    ret i1 false
1124;
1125  %a = icmp ule i8 %x, 13
1126  %b = icmp eq i8 %x, 17
1127  %c = and i1 %a, %b
1128  ret i1 %c
1129}
1130
1131; x <=u 13 && x != 17
1132
1133define i1 @and_ule_ne(i8 %x) {
1134; CHECK-LABEL: @and_ule_ne(
1135; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
1136; CHECK-NEXT:    ret i1 [[A]]
1137;
1138  %a = icmp ule i8 %x, 13
1139  %b = icmp ne i8 %x, 17
1140  %c = and i1 %a, %b
1141  ret i1 %c
1142}
1143
1144; x <=u 13 && x >=s 17
1145
1146define i1 @and_ule_sge(i8 %x) {
1147; CHECK-LABEL: @and_ule_sge(
1148; CHECK-NEXT:    ret i1 false
1149;
1150  %a = icmp ule i8 %x, 13
1151  %b = icmp sge i8 %x, 17
1152  %c = and i1 %a, %b
1153  ret i1 %c
1154}
1155
1156; x <=u 13 && x >s 17
1157
1158define i1 @and_ule_sgt(i8 %x) {
1159; CHECK-LABEL: @and_ule_sgt(
1160; CHECK-NEXT:    ret i1 false
1161;
1162  %a = icmp ule i8 %x, 13
1163  %b = icmp sgt i8 %x, 17
1164  %c = and i1 %a, %b
1165  ret i1 %c
1166}
1167
1168; x <=u 13 && x <=s 17
1169
1170define i1 @and_ule_sle(i8 %x) {
1171; CHECK-LABEL: @and_ule_sle(
1172; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
1173; CHECK-NEXT:    ret i1 [[A]]
1174;
1175  %a = icmp ule i8 %x, 13
1176  %b = icmp sle i8 %x, 17
1177  %c = and i1 %a, %b
1178  ret i1 %c
1179}
1180
1181; x <=u 13 && x <s 17
1182
1183define i1 @and_ule_slt(i8 %x) {
1184; CHECK-LABEL: @and_ule_slt(
1185; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
1186; CHECK-NEXT:    ret i1 [[A]]
1187;
1188  %a = icmp ule i8 %x, 13
1189  %b = icmp slt i8 %x, 17
1190  %c = and i1 %a, %b
1191  ret i1 %c
1192}
1193
1194; x <=u 13 && x >=u 17
1195
1196define i1 @and_ule_uge(i8 %x) {
1197; CHECK-LABEL: @and_ule_uge(
1198; CHECK-NEXT:    ret i1 false
1199;
1200  %a = icmp ule i8 %x, 13
1201  %b = icmp uge i8 %x, 17
1202  %c = and i1 %a, %b
1203  ret i1 %c
1204}
1205
1206; x <=u 13 && x >u 17
1207
1208define i1 @and_ule_ugt(i8 %x) {
1209; CHECK-LABEL: @and_ule_ugt(
1210; CHECK-NEXT:    ret i1 false
1211;
1212  %a = icmp ule i8 %x, 13
1213  %b = icmp ugt i8 %x, 17
1214  %c = and i1 %a, %b
1215  ret i1 %c
1216}
1217
1218; x <=u 13 && x <=u 17
1219
1220define i1 @and_ule_ule(i8 %x) {
1221; CHECK-LABEL: @and_ule_ule(
1222; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
1223; CHECK-NEXT:    ret i1 [[A]]
1224;
1225  %a = icmp ule i8 %x, 13
1226  %b = icmp ule i8 %x, 17
1227  %c = and i1 %a, %b
1228  ret i1 %c
1229}
1230
1231; x <=u 13 && x <u 17
1232
1233define i1 @and_ule_ult(i8 %x) {
1234; CHECK-LABEL: @and_ule_ult(
1235; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
1236; CHECK-NEXT:    ret i1 [[A]]
1237;
1238  %a = icmp ule i8 %x, 13
1239  %b = icmp ult i8 %x, 17
1240  %c = and i1 %a, %b
1241  ret i1 %c
1242}
1243
1244; ult
1245; x <u 13 && x == 17
1246
1247define i1 @and_ult_eq(i8 %x) {
1248; CHECK-LABEL: @and_ult_eq(
1249; CHECK-NEXT:    ret i1 false
1250;
1251  %a = icmp ult i8 %x, 13
1252  %b = icmp eq i8 %x, 17
1253  %c = and i1 %a, %b
1254  ret i1 %c
1255}
1256
1257; x <u 13 && x != 17
1258
1259define i1 @and_ult_ne(i8 %x) {
1260; CHECK-LABEL: @and_ult_ne(
1261; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
1262; CHECK-NEXT:    ret i1 [[A]]
1263;
1264  %a = icmp ult i8 %x, 13
1265  %b = icmp ne i8 %x, 17
1266  %c = and i1 %a, %b
1267  ret i1 %c
1268}
1269
1270; x <u 13 && x >=s 17
1271
1272define i1 @and_ult_sge(i8 %x) {
1273; CHECK-LABEL: @and_ult_sge(
1274; CHECK-NEXT:    ret i1 false
1275;
1276  %a = icmp ult i8 %x, 13
1277  %b = icmp sge i8 %x, 17
1278  %c = and i1 %a, %b
1279  ret i1 %c
1280}
1281
1282; x <u 13 && x >s 17
1283
1284define i1 @and_ult_sgt(i8 %x) {
1285; CHECK-LABEL: @and_ult_sgt(
1286; CHECK-NEXT:    ret i1 false
1287;
1288  %a = icmp ult i8 %x, 13
1289  %b = icmp sgt i8 %x, 17
1290  %c = and i1 %a, %b
1291  ret i1 %c
1292}
1293
1294; x <u 13 && x <=s 17
1295
1296define i1 @and_ult_sle(i8 %x) {
1297; CHECK-LABEL: @and_ult_sle(
1298; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
1299; CHECK-NEXT:    ret i1 [[A]]
1300;
1301  %a = icmp ult i8 %x, 13
1302  %b = icmp sle i8 %x, 17
1303  %c = and i1 %a, %b
1304  ret i1 %c
1305}
1306
1307; x <u 13 && x <s 17
1308
1309define i1 @and_ult_slt(i8 %x) {
1310; CHECK-LABEL: @and_ult_slt(
1311; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
1312; CHECK-NEXT:    ret i1 [[A]]
1313;
1314  %a = icmp ult i8 %x, 13
1315  %b = icmp slt i8 %x, 17
1316  %c = and i1 %a, %b
1317  ret i1 %c
1318}
1319
1320; x <u 13 && x >=u 17
1321
1322define i1 @and_ult_uge(i8 %x) {
1323; CHECK-LABEL: @and_ult_uge(
1324; CHECK-NEXT:    ret i1 false
1325;
1326  %a = icmp ult i8 %x, 13
1327  %b = icmp uge i8 %x, 17
1328  %c = and i1 %a, %b
1329  ret i1 %c
1330}
1331
1332; x <u 13 && x >u 17
1333
1334define i1 @and_ult_ugt(i8 %x) {
1335; CHECK-LABEL: @and_ult_ugt(
1336; CHECK-NEXT:    ret i1 false
1337;
1338  %a = icmp ult i8 %x, 13
1339  %b = icmp ugt i8 %x, 17
1340  %c = and i1 %a, %b
1341  ret i1 %c
1342}
1343
1344; x <u 13 && x <=u 17
1345
1346define i1 @and_ult_ule(i8 %x) {
1347; CHECK-LABEL: @and_ult_ule(
1348; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
1349; CHECK-NEXT:    ret i1 [[A]]
1350;
1351  %a = icmp ult i8 %x, 13
1352  %b = icmp ule i8 %x, 17
1353  %c = and i1 %a, %b
1354  ret i1 %c
1355}
1356
1357; x <u 13 && x <u 17
1358
1359define i1 @and_ult_ult(i8 %x) {
1360; CHECK-LABEL: @and_ult_ult(
1361; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
1362; CHECK-NEXT:    ret i1 [[A]]
1363;
1364  %a = icmp ult i8 %x, 13
1365  %b = icmp ult i8 %x, 17
1366  %c = and i1 %a, %b
1367  ret i1 %c
1368}
1369
1370; eq
1371; x == 23 && x == 17
1372
1373define i1 @and_eq_eq_swap(i8 %x) {
1374; CHECK-LABEL: @and_eq_eq_swap(
1375; CHECK-NEXT:    ret i1 false
1376;
1377  %a = icmp eq i8 %x, 23
1378  %b = icmp eq i8 %x, 17
1379  %c = and i1 %a, %b
1380  ret i1 %c
1381}
1382
1383; x == 23 && x != 17
1384
1385define i1 @and_eq_ne_swap(i8 %x) {
1386; CHECK-LABEL: @and_eq_ne_swap(
1387; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
1388; CHECK-NEXT:    ret i1 [[A]]
1389;
1390  %a = icmp eq i8 %x, 23
1391  %b = icmp ne i8 %x, 17
1392  %c = and i1 %a, %b
1393  ret i1 %c
1394}
1395
1396; x == 23 && x >=s 17
1397
1398define i1 @and_eq_sge_swap(i8 %x) {
1399; CHECK-LABEL: @and_eq_sge_swap(
1400; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
1401; CHECK-NEXT:    ret i1 [[A]]
1402;
1403  %a = icmp eq i8 %x, 23
1404  %b = icmp sge i8 %x, 17
1405  %c = and i1 %a, %b
1406  ret i1 %c
1407}
1408
1409; x == 23 && x >s 17
1410
1411define i1 @and_eq_sgt_swap(i8 %x) {
1412; CHECK-LABEL: @and_eq_sgt_swap(
1413; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
1414; CHECK-NEXT:    ret i1 [[A]]
1415;
1416  %a = icmp eq i8 %x, 23
1417  %b = icmp sgt i8 %x, 17
1418  %c = and i1 %a, %b
1419  ret i1 %c
1420}
1421
1422; x == 23 && x <=s 17
1423
1424define i1 @and_eq_sle_swap(i8 %x) {
1425; CHECK-LABEL: @and_eq_sle_swap(
1426; CHECK-NEXT:    ret i1 false
1427;
1428  %a = icmp eq i8 %x, 23
1429  %b = icmp sle i8 %x, 17
1430  %c = and i1 %a, %b
1431  ret i1 %c
1432}
1433
1434; x == 23 && x <s 17
1435
1436define i1 @and_eq_slt_swap(i8 %x) {
1437; CHECK-LABEL: @and_eq_slt_swap(
1438; CHECK-NEXT:    ret i1 false
1439;
1440  %a = icmp eq i8 %x, 23
1441  %b = icmp slt i8 %x, 17
1442  %c = and i1 %a, %b
1443  ret i1 %c
1444}
1445
1446; x == 23 && x >=u 17
1447
1448define i1 @and_eq_uge_swap(i8 %x) {
1449; CHECK-LABEL: @and_eq_uge_swap(
1450; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
1451; CHECK-NEXT:    ret i1 [[A]]
1452;
1453  %a = icmp eq i8 %x, 23
1454  %b = icmp uge i8 %x, 17
1455  %c = and i1 %a, %b
1456  ret i1 %c
1457}
1458
1459; x == 23 && x >u 17
1460
1461define i1 @and_eq_ugt_swap(i8 %x) {
1462; CHECK-LABEL: @and_eq_ugt_swap(
1463; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
1464; CHECK-NEXT:    ret i1 [[A]]
1465;
1466  %a = icmp eq i8 %x, 23
1467  %b = icmp ugt i8 %x, 17
1468  %c = and i1 %a, %b
1469  ret i1 %c
1470}
1471
1472; x == 23 && x <=u 17
1473
1474define i1 @and_eq_ule_swap(i8 %x) {
1475; CHECK-LABEL: @and_eq_ule_swap(
1476; CHECK-NEXT:    ret i1 false
1477;
1478  %a = icmp eq i8 %x, 23
1479  %b = icmp ule i8 %x, 17
1480  %c = and i1 %a, %b
1481  ret i1 %c
1482}
1483
1484; x == 23 && x <u 17
1485
1486define i1 @and_eq_ult_swap(i8 %x) {
1487; CHECK-LABEL: @and_eq_ult_swap(
1488; CHECK-NEXT:    ret i1 false
1489;
1490  %a = icmp eq i8 %x, 23
1491  %b = icmp ult i8 %x, 17
1492  %c = and i1 %a, %b
1493  ret i1 %c
1494}
1495
1496; ne
1497; x != 23 && x == 17
1498
1499define i1 @and_ne_eq_swap(i8 %x) {
1500; CHECK-LABEL: @and_ne_eq_swap(
1501; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
1502; CHECK-NEXT:    ret i1 [[B]]
1503;
1504  %a = icmp ne i8 %x, 23
1505  %b = icmp eq i8 %x, 17
1506  %c = and i1 %a, %b
1507  ret i1 %c
1508}
1509
1510; x != 23 && x != 17
1511
1512define i1 @and_ne_ne_swap(i8 %x) {
1513; CHECK-LABEL: @and_ne_ne_swap(
1514; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
1515; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
1516; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1517; CHECK-NEXT:    ret i1 [[C]]
1518;
1519  %a = icmp ne i8 %x, 23
1520  %b = icmp ne i8 %x, 17
1521  %c = and i1 %a, %b
1522  ret i1 %c
1523}
1524
1525; x != 23 && x >=s 17
1526
1527define i1 @and_ne_sge_swap(i8 %x) {
1528; CHECK-LABEL: @and_ne_sge_swap(
1529; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
1530; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
1531; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1532; CHECK-NEXT:    ret i1 [[C]]
1533;
1534  %a = icmp ne i8 %x, 23
1535  %b = icmp sge i8 %x, 17
1536  %c = and i1 %a, %b
1537  ret i1 %c
1538}
1539
1540; x != 23 && x >s 17
1541
1542define i1 @and_ne_sgt_swap(i8 %x) {
1543; CHECK-LABEL: @and_ne_sgt_swap(
1544; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
1545; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
1546; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1547; CHECK-NEXT:    ret i1 [[C]]
1548;
1549  %a = icmp ne i8 %x, 23
1550  %b = icmp sgt i8 %x, 17
1551  %c = and i1 %a, %b
1552  ret i1 %c
1553}
1554
1555; x != 23 && x <=s 17
1556
1557define i1 @and_ne_sle_swap(i8 %x) {
1558; CHECK-LABEL: @and_ne_sle_swap(
1559; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
1560; CHECK-NEXT:    ret i1 [[B]]
1561;
1562  %a = icmp ne i8 %x, 23
1563  %b = icmp sle i8 %x, 17
1564  %c = and i1 %a, %b
1565  ret i1 %c
1566}
1567
1568; x != 23 && x <s 17
1569
1570define i1 @and_ne_slt_swap(i8 %x) {
1571; CHECK-LABEL: @and_ne_slt_swap(
1572; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
1573; CHECK-NEXT:    ret i1 [[B]]
1574;
1575  %a = icmp ne i8 %x, 23
1576  %b = icmp slt i8 %x, 17
1577  %c = and i1 %a, %b
1578  ret i1 %c
1579}
1580
1581; x != 23 && x >=u 17
1582
1583define i1 @and_ne_uge_swap(i8 %x) {
1584; CHECK-LABEL: @and_ne_uge_swap(
1585; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
1586; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
1587; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1588; CHECK-NEXT:    ret i1 [[C]]
1589;
1590  %a = icmp ne i8 %x, 23
1591  %b = icmp uge i8 %x, 17
1592  %c = and i1 %a, %b
1593  ret i1 %c
1594}
1595
1596; x != 23 && x >u 17
1597
1598define i1 @and_ne_ugt_swap(i8 %x) {
1599; CHECK-LABEL: @and_ne_ugt_swap(
1600; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
1601; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
1602; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1603; CHECK-NEXT:    ret i1 [[C]]
1604;
1605  %a = icmp ne i8 %x, 23
1606  %b = icmp ugt i8 %x, 17
1607  %c = and i1 %a, %b
1608  ret i1 %c
1609}
1610
1611; x != 23 && x <=u 17
1612
1613define i1 @and_ne_ule_swap(i8 %x) {
1614; CHECK-LABEL: @and_ne_ule_swap(
1615; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
1616; CHECK-NEXT:    ret i1 [[B]]
1617;
1618  %a = icmp ne i8 %x, 23
1619  %b = icmp ule i8 %x, 17
1620  %c = and i1 %a, %b
1621  ret i1 %c
1622}
1623
1624; x != 23 && x <u 17
1625
1626define i1 @and_ne_ult_swap(i8 %x) {
1627; CHECK-LABEL: @and_ne_ult_swap(
1628; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
1629; CHECK-NEXT:    ret i1 [[B]]
1630;
1631  %a = icmp ne i8 %x, 23
1632  %b = icmp ult i8 %x, 17
1633  %c = and i1 %a, %b
1634  ret i1 %c
1635}
1636
1637; sge
1638; x >=s 23 && x == 17
1639
1640define i1 @and_sge_eq_swap(i8 %x) {
1641; CHECK-LABEL: @and_sge_eq_swap(
1642; CHECK-NEXT:    ret i1 false
1643;
1644  %a = icmp sge i8 %x, 23
1645  %b = icmp eq i8 %x, 17
1646  %c = and i1 %a, %b
1647  ret i1 %c
1648}
1649
1650; x >=s 23 && x != 17
1651
1652define i1 @and_sge_ne_swap(i8 %x) {
1653; CHECK-LABEL: @and_sge_ne_swap(
1654; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
1655; CHECK-NEXT:    ret i1 [[A]]
1656;
1657  %a = icmp sge i8 %x, 23
1658  %b = icmp ne i8 %x, 17
1659  %c = and i1 %a, %b
1660  ret i1 %c
1661}
1662
1663; x >=s 23 && x >=s 17
1664
1665define i1 @and_sge_sge_swap(i8 %x) {
1666; CHECK-LABEL: @and_sge_sge_swap(
1667; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
1668; CHECK-NEXT:    ret i1 [[A]]
1669;
1670  %a = icmp sge i8 %x, 23
1671  %b = icmp sge i8 %x, 17
1672  %c = and i1 %a, %b
1673  ret i1 %c
1674}
1675
1676; x >=s 23 && x >s 17
1677
1678define i1 @and_sge_sgt_swap(i8 %x) {
1679; CHECK-LABEL: @and_sge_sgt_swap(
1680; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
1681; CHECK-NEXT:    ret i1 [[A]]
1682;
1683  %a = icmp sge i8 %x, 23
1684  %b = icmp sgt i8 %x, 17
1685  %c = and i1 %a, %b
1686  ret i1 %c
1687}
1688
1689; x >=s 23 && x <=s 17
1690
1691define i1 @and_sge_sle_swap(i8 %x) {
1692; CHECK-LABEL: @and_sge_sle_swap(
1693; CHECK-NEXT:    ret i1 false
1694;
1695  %a = icmp sge i8 %x, 23
1696  %b = icmp sle i8 %x, 17
1697  %c = and i1 %a, %b
1698  ret i1 %c
1699}
1700
1701; x >=s 23 && x <s 17
1702
1703define i1 @and_sge_slt_swap(i8 %x) {
1704; CHECK-LABEL: @and_sge_slt_swap(
1705; CHECK-NEXT:    ret i1 false
1706;
1707  %a = icmp sge i8 %x, 23
1708  %b = icmp slt i8 %x, 17
1709  %c = and i1 %a, %b
1710  ret i1 %c
1711}
1712
1713; x >=s 23 && x >=u 17
1714
1715define i1 @and_sge_uge_swap(i8 %x) {
1716; CHECK-LABEL: @and_sge_uge_swap(
1717; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
1718; CHECK-NEXT:    ret i1 [[A]]
1719;
1720  %a = icmp sge i8 %x, 23
1721  %b = icmp uge i8 %x, 17
1722  %c = and i1 %a, %b
1723  ret i1 %c
1724}
1725
1726; x >=s 23 && x >u 17
1727
1728define i1 @and_sge_ugt_swap(i8 %x) {
1729; CHECK-LABEL: @and_sge_ugt_swap(
1730; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
1731; CHECK-NEXT:    ret i1 [[A]]
1732;
1733  %a = icmp sge i8 %x, 23
1734  %b = icmp ugt i8 %x, 17
1735  %c = and i1 %a, %b
1736  ret i1 %c
1737}
1738
1739; x >=s 23 && x <=u 17
1740
1741define i1 @and_sge_ule_swap(i8 %x) {
1742; CHECK-LABEL: @and_sge_ule_swap(
1743; CHECK-NEXT:    ret i1 false
1744;
1745  %a = icmp sge i8 %x, 23
1746  %b = icmp ule i8 %x, 17
1747  %c = and i1 %a, %b
1748  ret i1 %c
1749}
1750
1751; x >=s 23 && x <u 17
1752
1753define i1 @and_sge_ult_swap(i8 %x) {
1754; CHECK-LABEL: @and_sge_ult_swap(
1755; CHECK-NEXT:    ret i1 false
1756;
1757  %a = icmp sge i8 %x, 23
1758  %b = icmp ult i8 %x, 17
1759  %c = and i1 %a, %b
1760  ret i1 %c
1761}
1762
1763; sgt
1764; x >s 23 && x == 17
1765
1766define i1 @and_sgt_eq_swap(i8 %x) {
1767; CHECK-LABEL: @and_sgt_eq_swap(
1768; CHECK-NEXT:    ret i1 false
1769;
1770  %a = icmp sgt i8 %x, 23
1771  %b = icmp eq i8 %x, 17
1772  %c = and i1 %a, %b
1773  ret i1 %c
1774}
1775
1776; x >s 23 && x != 17
1777
1778define i1 @and_sgt_ne_swap(i8 %x) {
1779; CHECK-LABEL: @and_sgt_ne_swap(
1780; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
1781; CHECK-NEXT:    ret i1 [[A]]
1782;
1783  %a = icmp sgt i8 %x, 23
1784  %b = icmp ne i8 %x, 17
1785  %c = and i1 %a, %b
1786  ret i1 %c
1787}
1788
1789; x >s 23 && x >=s 17
1790
1791define i1 @and_sgt_sge_swap(i8 %x) {
1792; CHECK-LABEL: @and_sgt_sge_swap(
1793; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
1794; CHECK-NEXT:    ret i1 [[A]]
1795;
1796  %a = icmp sgt i8 %x, 23
1797  %b = icmp sge i8 %x, 17
1798  %c = and i1 %a, %b
1799  ret i1 %c
1800}
1801
1802; x >s 23 && x >s 17
1803
1804define i1 @and_sgt_sgt_swap(i8 %x) {
1805; CHECK-LABEL: @and_sgt_sgt_swap(
1806; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
1807; CHECK-NEXT:    ret i1 [[A]]
1808;
1809  %a = icmp sgt i8 %x, 23
1810  %b = icmp sgt i8 %x, 17
1811  %c = and i1 %a, %b
1812  ret i1 %c
1813}
1814
1815; x >s 23 && x <=s 17
1816
1817define i1 @and_sgt_sle_swap(i8 %x) {
1818; CHECK-LABEL: @and_sgt_sle_swap(
1819; CHECK-NEXT:    ret i1 false
1820;
1821  %a = icmp sgt i8 %x, 23
1822  %b = icmp sle i8 %x, 17
1823  %c = and i1 %a, %b
1824  ret i1 %c
1825}
1826
1827; x >s 23 && x <s 17
1828
1829define i1 @and_sgt_slt_swap(i8 %x) {
1830; CHECK-LABEL: @and_sgt_slt_swap(
1831; CHECK-NEXT:    ret i1 false
1832;
1833  %a = icmp sgt i8 %x, 23
1834  %b = icmp slt i8 %x, 17
1835  %c = and i1 %a, %b
1836  ret i1 %c
1837}
1838
1839; x >s 23 && x >=u 17
1840
1841define i1 @and_sgt_uge_swap(i8 %x) {
1842; CHECK-LABEL: @and_sgt_uge_swap(
1843; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
1844; CHECK-NEXT:    ret i1 [[A]]
1845;
1846  %a = icmp sgt i8 %x, 23
1847  %b = icmp uge i8 %x, 17
1848  %c = and i1 %a, %b
1849  ret i1 %c
1850}
1851
1852; x >s 23 && x >u 17
1853
1854define i1 @and_sgt_ugt_swap(i8 %x) {
1855; CHECK-LABEL: @and_sgt_ugt_swap(
1856; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
1857; CHECK-NEXT:    ret i1 [[A]]
1858;
1859  %a = icmp sgt i8 %x, 23
1860  %b = icmp ugt i8 %x, 17
1861  %c = and i1 %a, %b
1862  ret i1 %c
1863}
1864
1865; x >s 23 && x <=u 17
1866
1867define i1 @and_sgt_ule_swap(i8 %x) {
1868; CHECK-LABEL: @and_sgt_ule_swap(
1869; CHECK-NEXT:    ret i1 false
1870;
1871  %a = icmp sgt i8 %x, 23
1872  %b = icmp ule i8 %x, 17
1873  %c = and i1 %a, %b
1874  ret i1 %c
1875}
1876
1877; x >s 23 && x <u 17
1878
1879define i1 @and_sgt_ult_swap(i8 %x) {
1880; CHECK-LABEL: @and_sgt_ult_swap(
1881; CHECK-NEXT:    ret i1 false
1882;
1883  %a = icmp sgt i8 %x, 23
1884  %b = icmp ult i8 %x, 17
1885  %c = and i1 %a, %b
1886  ret i1 %c
1887}
1888
1889; sle
1890; x <=s 23 && x == 17
1891
1892define i1 @and_sle_eq_swap(i8 %x) {
1893; CHECK-LABEL: @and_sle_eq_swap(
1894; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
1895; CHECK-NEXT:    ret i1 [[B]]
1896;
1897  %a = icmp sle i8 %x, 23
1898  %b = icmp eq i8 %x, 17
1899  %c = and i1 %a, %b
1900  ret i1 %c
1901}
1902
1903; x <=s 23 && x != 17
1904
1905define i1 @and_sle_ne_swap(i8 %x) {
1906; CHECK-LABEL: @and_sle_ne_swap(
1907; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
1908; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
1909; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1910; CHECK-NEXT:    ret i1 [[C]]
1911;
1912  %a = icmp sle i8 %x, 23
1913  %b = icmp ne i8 %x, 17
1914  %c = and i1 %a, %b
1915  ret i1 %c
1916}
1917
1918; x <=s 23 && x >=s 17
1919
1920define i1 @and_sle_sge_swap(i8 %x) {
1921; CHECK-LABEL: @and_sle_sge_swap(
1922; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
1923; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
1924; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1925; CHECK-NEXT:    ret i1 [[C]]
1926;
1927  %a = icmp sle i8 %x, 23
1928  %b = icmp sge i8 %x, 17
1929  %c = and i1 %a, %b
1930  ret i1 %c
1931}
1932
1933; x <=s 23 && x >s 17
1934
1935define i1 @and_sle_sgt_swap(i8 %x) {
1936; CHECK-LABEL: @and_sle_sgt_swap(
1937; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
1938; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
1939; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1940; CHECK-NEXT:    ret i1 [[C]]
1941;
1942  %a = icmp sle i8 %x, 23
1943  %b = icmp sgt i8 %x, 17
1944  %c = and i1 %a, %b
1945  ret i1 %c
1946}
1947
1948; x <=s 23 && x <=s 17
1949
1950define i1 @and_sle_sle_swap(i8 %x) {
1951; CHECK-LABEL: @and_sle_sle_swap(
1952; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
1953; CHECK-NEXT:    ret i1 [[B]]
1954;
1955  %a = icmp sle i8 %x, 23
1956  %b = icmp sle i8 %x, 17
1957  %c = and i1 %a, %b
1958  ret i1 %c
1959}
1960
1961; x <=s 23 && x <s 17
1962
1963define i1 @and_sle_slt_swap(i8 %x) {
1964; CHECK-LABEL: @and_sle_slt_swap(
1965; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
1966; CHECK-NEXT:    ret i1 [[B]]
1967;
1968  %a = icmp sle i8 %x, 23
1969  %b = icmp slt i8 %x, 17
1970  %c = and i1 %a, %b
1971  ret i1 %c
1972}
1973
1974; x <=s 23 && x >=u 17
1975
1976define i1 @and_sle_uge_swap(i8 %x) {
1977; CHECK-LABEL: @and_sle_uge_swap(
1978; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
1979; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
1980; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1981; CHECK-NEXT:    ret i1 [[C]]
1982;
1983  %a = icmp sle i8 %x, 23
1984  %b = icmp uge i8 %x, 17
1985  %c = and i1 %a, %b
1986  ret i1 %c
1987}
1988
1989; x <=s 23 && x >u 17
1990
1991define i1 @and_sle_ugt_swap(i8 %x) {
1992; CHECK-LABEL: @and_sle_ugt_swap(
1993; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
1994; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
1995; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1996; CHECK-NEXT:    ret i1 [[C]]
1997;
1998  %a = icmp sle i8 %x, 23
1999  %b = icmp ugt i8 %x, 17
2000  %c = and i1 %a, %b
2001  ret i1 %c
2002}
2003
2004; x <=s 23 && x <=u 17
2005
2006define i1 @and_sle_ule_swap(i8 %x) {
2007; CHECK-LABEL: @and_sle_ule_swap(
2008; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
2009; CHECK-NEXT:    ret i1 [[B]]
2010;
2011  %a = icmp sle i8 %x, 23
2012  %b = icmp ule i8 %x, 17
2013  %c = and i1 %a, %b
2014  ret i1 %c
2015}
2016
2017; x <=s 23 && x <u 17
2018
2019define i1 @and_sle_ult_swap(i8 %x) {
2020; CHECK-LABEL: @and_sle_ult_swap(
2021; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
2022; CHECK-NEXT:    ret i1 [[B]]
2023;
2024  %a = icmp sle i8 %x, 23
2025  %b = icmp ult i8 %x, 17
2026  %c = and i1 %a, %b
2027  ret i1 %c
2028}
2029
2030; slt
2031; x <s 23 && x == 17
2032
2033define i1 @and_slt_eq_swap(i8 %x) {
2034; CHECK-LABEL: @and_slt_eq_swap(
2035; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
2036; CHECK-NEXT:    ret i1 [[B]]
2037;
2038  %a = icmp slt i8 %x, 23
2039  %b = icmp eq i8 %x, 17
2040  %c = and i1 %a, %b
2041  ret i1 %c
2042}
2043
2044; x <s 23 && x != 17
2045
2046define i1 @and_slt_ne_swap(i8 %x) {
2047; CHECK-LABEL: @and_slt_ne_swap(
2048; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
2049; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
2050; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2051; CHECK-NEXT:    ret i1 [[C]]
2052;
2053  %a = icmp slt i8 %x, 23
2054  %b = icmp ne i8 %x, 17
2055  %c = and i1 %a, %b
2056  ret i1 %c
2057}
2058
2059; x <s 23 && x >=s 17
2060
2061define i1 @and_slt_sge_swap(i8 %x) {
2062; CHECK-LABEL: @and_slt_sge_swap(
2063; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
2064; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2065; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2066; CHECK-NEXT:    ret i1 [[C]]
2067;
2068  %a = icmp slt i8 %x, 23
2069  %b = icmp sge i8 %x, 17
2070  %c = and i1 %a, %b
2071  ret i1 %c
2072}
2073
2074; x <s 23 && x >s 17
2075
2076define i1 @and_slt_sgt_swap(i8 %x) {
2077; CHECK-LABEL: @and_slt_sgt_swap(
2078; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
2079; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2080; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2081; CHECK-NEXT:    ret i1 [[C]]
2082;
2083  %a = icmp slt i8 %x, 23
2084  %b = icmp sgt i8 %x, 17
2085  %c = and i1 %a, %b
2086  ret i1 %c
2087}
2088
2089; x <s 23 && x <=s 17
2090
2091define i1 @and_slt_sle_swap(i8 %x) {
2092; CHECK-LABEL: @and_slt_sle_swap(
2093; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
2094; CHECK-NEXT:    ret i1 [[B]]
2095;
2096  %a = icmp slt i8 %x, 23
2097  %b = icmp sle i8 %x, 17
2098  %c = and i1 %a, %b
2099  ret i1 %c
2100}
2101
2102; x <s 23 && x <s 17
2103
2104define i1 @and_slt_slt_swap(i8 %x) {
2105; CHECK-LABEL: @and_slt_slt_swap(
2106; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
2107; CHECK-NEXT:    ret i1 [[B]]
2108;
2109  %a = icmp slt i8 %x, 23
2110  %b = icmp slt i8 %x, 17
2111  %c = and i1 %a, %b
2112  ret i1 %c
2113}
2114
2115; x <s 23 && x >=u 17
2116
2117define i1 @and_slt_uge_swap(i8 %x) {
2118; CHECK-LABEL: @and_slt_uge_swap(
2119; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
2120; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
2121; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2122; CHECK-NEXT:    ret i1 [[C]]
2123;
2124  %a = icmp slt i8 %x, 23
2125  %b = icmp uge i8 %x, 17
2126  %c = and i1 %a, %b
2127  ret i1 %c
2128}
2129
2130; x <s 23 && x >u 17
2131
2132define i1 @and_slt_ugt_swap(i8 %x) {
2133; CHECK-LABEL: @and_slt_ugt_swap(
2134; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
2135; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
2136; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2137; CHECK-NEXT:    ret i1 [[C]]
2138;
2139  %a = icmp slt i8 %x, 23
2140  %b = icmp ugt i8 %x, 17
2141  %c = and i1 %a, %b
2142  ret i1 %c
2143}
2144
2145; x <s 23 && x <=u 17
2146
2147define i1 @and_slt_ule_swap(i8 %x) {
2148; CHECK-LABEL: @and_slt_ule_swap(
2149; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
2150; CHECK-NEXT:    ret i1 [[B]]
2151;
2152  %a = icmp slt i8 %x, 23
2153  %b = icmp ule i8 %x, 17
2154  %c = and i1 %a, %b
2155  ret i1 %c
2156}
2157
2158; x <s 23 && x <u 17
2159
2160define i1 @and_slt_ult_swap(i8 %x) {
2161; CHECK-LABEL: @and_slt_ult_swap(
2162; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
2163; CHECK-NEXT:    ret i1 [[B]]
2164;
2165  %a = icmp slt i8 %x, 23
2166  %b = icmp ult i8 %x, 17
2167  %c = and i1 %a, %b
2168  ret i1 %c
2169}
2170
2171; uge
2172; x >=u 23 && x == 17
2173
2174define i1 @and_uge_eq_swap(i8 %x) {
2175; CHECK-LABEL: @and_uge_eq_swap(
2176; CHECK-NEXT:    ret i1 false
2177;
2178  %a = icmp uge i8 %x, 23
2179  %b = icmp eq i8 %x, 17
2180  %c = and i1 %a, %b
2181  ret i1 %c
2182}
2183
2184; x >=u 23 && x != 17
2185
2186define i1 @and_uge_ne_swap(i8 %x) {
2187; CHECK-LABEL: @and_uge_ne_swap(
2188; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2189; CHECK-NEXT:    ret i1 [[A]]
2190;
2191  %a = icmp uge i8 %x, 23
2192  %b = icmp ne i8 %x, 17
2193  %c = and i1 %a, %b
2194  ret i1 %c
2195}
2196
2197; x >=u 23 && x >=s 17
2198
2199define i1 @and_uge_sge_swap(i8 %x) {
2200; CHECK-LABEL: @and_uge_sge_swap(
2201; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2202; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2203; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2204; CHECK-NEXT:    ret i1 [[C]]
2205;
2206  %a = icmp uge i8 %x, 23
2207  %b = icmp sge i8 %x, 17
2208  %c = and i1 %a, %b
2209  ret i1 %c
2210}
2211
2212; x >=u 23 && x >s 17
2213
2214define i1 @and_uge_sgt_swap(i8 %x) {
2215; CHECK-LABEL: @and_uge_sgt_swap(
2216; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2217; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2218; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2219; CHECK-NEXT:    ret i1 [[C]]
2220;
2221  %a = icmp uge i8 %x, 23
2222  %b = icmp sgt i8 %x, 17
2223  %c = and i1 %a, %b
2224  ret i1 %c
2225}
2226
2227; x >=u 23 && x <=s 17
2228
2229define i1 @and_uge_sle_swap(i8 %x) {
2230; CHECK-LABEL: @and_uge_sle_swap(
2231; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2232; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
2233; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2234; CHECK-NEXT:    ret i1 [[C]]
2235;
2236  %a = icmp uge i8 %x, 23
2237  %b = icmp sle i8 %x, 17
2238  %c = and i1 %a, %b
2239  ret i1 %c
2240}
2241
2242; x >=u 23 && x <s 17
2243
2244define i1 @and_uge_slt_swap(i8 %x) {
2245; CHECK-LABEL: @and_uge_slt_swap(
2246; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2247; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
2248; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2249; CHECK-NEXT:    ret i1 [[C]]
2250;
2251  %a = icmp uge i8 %x, 23
2252  %b = icmp slt i8 %x, 17
2253  %c = and i1 %a, %b
2254  ret i1 %c
2255}
2256
2257; x >=u 23 && x >=u 17
2258
2259define i1 @and_uge_uge_swap(i8 %x) {
2260; CHECK-LABEL: @and_uge_uge_swap(
2261; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2262; CHECK-NEXT:    ret i1 [[A]]
2263;
2264  %a = icmp uge i8 %x, 23
2265  %b = icmp uge i8 %x, 17
2266  %c = and i1 %a, %b
2267  ret i1 %c
2268}
2269
2270; x >=u 23 && x >u 17
2271
2272define i1 @and_uge_ugt_swap(i8 %x) {
2273; CHECK-LABEL: @and_uge_ugt_swap(
2274; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
2275; CHECK-NEXT:    ret i1 [[A]]
2276;
2277  %a = icmp uge i8 %x, 23
2278  %b = icmp ugt i8 %x, 17
2279  %c = and i1 %a, %b
2280  ret i1 %c
2281}
2282
2283; x >=u 23 && x <=u 17
2284
2285define i1 @and_uge_ule_swap(i8 %x) {
2286; CHECK-LABEL: @and_uge_ule_swap(
2287; CHECK-NEXT:    ret i1 false
2288;
2289  %a = icmp uge i8 %x, 23
2290  %b = icmp ule i8 %x, 17
2291  %c = and i1 %a, %b
2292  ret i1 %c
2293}
2294
2295; x >=u 23 && x <u 17
2296
2297define i1 @and_uge_ult_swap(i8 %x) {
2298; CHECK-LABEL: @and_uge_ult_swap(
2299; CHECK-NEXT:    ret i1 false
2300;
2301  %a = icmp uge i8 %x, 23
2302  %b = icmp ult i8 %x, 17
2303  %c = and i1 %a, %b
2304  ret i1 %c
2305}
2306
2307; ugt
2308; x >u 23 && x == 17
2309
2310define i1 @and_ugt_eq_swap(i8 %x) {
2311; CHECK-LABEL: @and_ugt_eq_swap(
2312; CHECK-NEXT:    ret i1 false
2313;
2314  %a = icmp ugt i8 %x, 23
2315  %b = icmp eq i8 %x, 17
2316  %c = and i1 %a, %b
2317  ret i1 %c
2318}
2319
2320; x >u 23 && x != 17
2321
2322define i1 @and_ugt_ne_swap(i8 %x) {
2323; CHECK-LABEL: @and_ugt_ne_swap(
2324; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2325; CHECK-NEXT:    ret i1 [[A]]
2326;
2327  %a = icmp ugt i8 %x, 23
2328  %b = icmp ne i8 %x, 17
2329  %c = and i1 %a, %b
2330  ret i1 %c
2331}
2332
2333; x >u 23 && x >=s 17
2334
2335define i1 @and_ugt_sge_swap(i8 %x) {
2336; CHECK-LABEL: @and_ugt_sge_swap(
2337; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2338; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2339; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2340; CHECK-NEXT:    ret i1 [[C]]
2341;
2342  %a = icmp ugt i8 %x, 23
2343  %b = icmp sge i8 %x, 17
2344  %c = and i1 %a, %b
2345  ret i1 %c
2346}
2347
2348; x >u 23 && x >s 17
2349
2350define i1 @and_ugt_sgt_swap(i8 %x) {
2351; CHECK-LABEL: @and_ugt_sgt_swap(
2352; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2353; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2354; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2355; CHECK-NEXT:    ret i1 [[C]]
2356;
2357  %a = icmp ugt i8 %x, 23
2358  %b = icmp sgt i8 %x, 17
2359  %c = and i1 %a, %b
2360  ret i1 %c
2361}
2362
2363; x >u 23 && x <=s 17
2364
2365define i1 @and_ugt_sle_swap(i8 %x) {
2366; CHECK-LABEL: @and_ugt_sle_swap(
2367; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2368; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
2369; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2370; CHECK-NEXT:    ret i1 [[C]]
2371;
2372  %a = icmp ugt i8 %x, 23
2373  %b = icmp sle i8 %x, 17
2374  %c = and i1 %a, %b
2375  ret i1 %c
2376}
2377
2378; x >u 23 && x <s 17
2379
2380define i1 @and_ugt_slt_swap(i8 %x) {
2381; CHECK-LABEL: @and_ugt_slt_swap(
2382; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2383; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
2384; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2385; CHECK-NEXT:    ret i1 [[C]]
2386;
2387  %a = icmp ugt i8 %x, 23
2388  %b = icmp slt i8 %x, 17
2389  %c = and i1 %a, %b
2390  ret i1 %c
2391}
2392
2393; x >u 23 && x >=u 17
2394
2395define i1 @and_ugt_uge_swap(i8 %x) {
2396; CHECK-LABEL: @and_ugt_uge_swap(
2397; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2398; CHECK-NEXT:    ret i1 [[A]]
2399;
2400  %a = icmp ugt i8 %x, 23
2401  %b = icmp uge i8 %x, 17
2402  %c = and i1 %a, %b
2403  ret i1 %c
2404}
2405
2406; x >u 23 && x >u 17
2407
2408define i1 @and_ugt_ugt_swap(i8 %x) {
2409; CHECK-LABEL: @and_ugt_ugt_swap(
2410; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
2411; CHECK-NEXT:    ret i1 [[A]]
2412;
2413  %a = icmp ugt i8 %x, 23
2414  %b = icmp ugt i8 %x, 17
2415  %c = and i1 %a, %b
2416  ret i1 %c
2417}
2418
2419; x >u 23 && x <=u 17
2420
2421define i1 @and_ugt_ule_swap(i8 %x) {
2422; CHECK-LABEL: @and_ugt_ule_swap(
2423; CHECK-NEXT:    ret i1 false
2424;
2425  %a = icmp ugt i8 %x, 23
2426  %b = icmp ule i8 %x, 17
2427  %c = and i1 %a, %b
2428  ret i1 %c
2429}
2430
2431; x >u 23 && x <u 17
2432
2433define i1 @and_ugt_ult_swap(i8 %x) {
2434; CHECK-LABEL: @and_ugt_ult_swap(
2435; CHECK-NEXT:    ret i1 false
2436;
2437  %a = icmp ugt i8 %x, 23
2438  %b = icmp ult i8 %x, 17
2439  %c = and i1 %a, %b
2440  ret i1 %c
2441}
2442
2443; ule
2444; x <=u 23 && x == 17
2445
2446define i1 @and_ule_eq_swap(i8 %x) {
2447; CHECK-LABEL: @and_ule_eq_swap(
2448; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
2449; CHECK-NEXT:    ret i1 [[B]]
2450;
2451  %a = icmp ule i8 %x, 23
2452  %b = icmp eq i8 %x, 17
2453  %c = and i1 %a, %b
2454  ret i1 %c
2455}
2456
2457; x <=u 23 && x != 17
2458
2459define i1 @and_ule_ne_swap(i8 %x) {
2460; CHECK-LABEL: @and_ule_ne_swap(
2461; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2462; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
2463; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2464; CHECK-NEXT:    ret i1 [[C]]
2465;
2466  %a = icmp ule i8 %x, 23
2467  %b = icmp ne i8 %x, 17
2468  %c = and i1 %a, %b
2469  ret i1 %c
2470}
2471
2472; x <=u 23 && x >=s 17
2473
2474define i1 @and_ule_sge_swap(i8 %x) {
2475; CHECK-LABEL: @and_ule_sge_swap(
2476; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2477; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2478; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2479; CHECK-NEXT:    ret i1 [[C]]
2480;
2481  %a = icmp ule i8 %x, 23
2482  %b = icmp sge i8 %x, 17
2483  %c = and i1 %a, %b
2484  ret i1 %c
2485}
2486
2487; x <=u 23 && x >s 17
2488
2489define i1 @and_ule_sgt_swap(i8 %x) {
2490; CHECK-LABEL: @and_ule_sgt_swap(
2491; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2492; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2493; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2494; CHECK-NEXT:    ret i1 [[C]]
2495;
2496  %a = icmp ule i8 %x, 23
2497  %b = icmp sgt i8 %x, 17
2498  %c = and i1 %a, %b
2499  ret i1 %c
2500}
2501
2502; x <=u 23 && x <=s 17
2503
2504define i1 @and_ule_sle_swap(i8 %x) {
2505; CHECK-LABEL: @and_ule_sle_swap(
2506; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2507; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
2508; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2509; CHECK-NEXT:    ret i1 [[C]]
2510;
2511  %a = icmp ule i8 %x, 23
2512  %b = icmp sle i8 %x, 17
2513  %c = and i1 %a, %b
2514  ret i1 %c
2515}
2516
2517; x <=u 23 && x <s 17
2518
2519define i1 @and_ule_slt_swap(i8 %x) {
2520; CHECK-LABEL: @and_ule_slt_swap(
2521; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2522; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
2523; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2524; CHECK-NEXT:    ret i1 [[C]]
2525;
2526  %a = icmp ule i8 %x, 23
2527  %b = icmp slt i8 %x, 17
2528  %c = and i1 %a, %b
2529  ret i1 %c
2530}
2531
2532; x <=u 23 && x >=u 17
2533
2534define i1 @and_ule_uge_swap(i8 %x) {
2535; CHECK-LABEL: @and_ule_uge_swap(
2536; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2537; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
2538; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2539; CHECK-NEXT:    ret i1 [[C]]
2540;
2541  %a = icmp ule i8 %x, 23
2542  %b = icmp uge i8 %x, 17
2543  %c = and i1 %a, %b
2544  ret i1 %c
2545}
2546
2547; x <=u 23 && x >u 17
2548
2549define i1 @and_ule_ugt_swap(i8 %x) {
2550; CHECK-LABEL: @and_ule_ugt_swap(
2551; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
2552; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
2553; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2554; CHECK-NEXT:    ret i1 [[C]]
2555;
2556  %a = icmp ule i8 %x, 23
2557  %b = icmp ugt i8 %x, 17
2558  %c = and i1 %a, %b
2559  ret i1 %c
2560}
2561
2562; x <=u 23 && x <=u 17
2563
2564define i1 @and_ule_ule_swap(i8 %x) {
2565; CHECK-LABEL: @and_ule_ule_swap(
2566; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
2567; CHECK-NEXT:    ret i1 [[B]]
2568;
2569  %a = icmp ule i8 %x, 23
2570  %b = icmp ule i8 %x, 17
2571  %c = and i1 %a, %b
2572  ret i1 %c
2573}
2574
2575; x <=u 23 && x <u 17
2576
2577define i1 @and_ule_ult_swap(i8 %x) {
2578; CHECK-LABEL: @and_ule_ult_swap(
2579; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
2580; CHECK-NEXT:    ret i1 [[B]]
2581;
2582  %a = icmp ule i8 %x, 23
2583  %b = icmp ult i8 %x, 17
2584  %c = and i1 %a, %b
2585  ret i1 %c
2586}
2587
2588; ult
2589; x <u 23 && x == 17
2590
2591define i1 @and_ult_eq_swap(i8 %x) {
2592; CHECK-LABEL: @and_ult_eq_swap(
2593; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X:%.*]], 17
2594; CHECK-NEXT:    ret i1 [[B]]
2595;
2596  %a = icmp ult i8 %x, 23
2597  %b = icmp eq i8 %x, 17
2598  %c = and i1 %a, %b
2599  ret i1 %c
2600}
2601
2602; x <u 23 && x != 17
2603
2604define i1 @and_ult_ne_swap(i8 %x) {
2605; CHECK-LABEL: @and_ult_ne_swap(
2606; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2607; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X]], 17
2608; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2609; CHECK-NEXT:    ret i1 [[C]]
2610;
2611  %a = icmp ult i8 %x, 23
2612  %b = icmp ne i8 %x, 17
2613  %c = and i1 %a, %b
2614  ret i1 %c
2615}
2616
2617; x <u 23 && x >=s 17
2618
2619define i1 @and_ult_sge_swap(i8 %x) {
2620; CHECK-LABEL: @and_ult_sge_swap(
2621; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2622; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2623; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2624; CHECK-NEXT:    ret i1 [[C]]
2625;
2626  %a = icmp ult i8 %x, 23
2627  %b = icmp sge i8 %x, 17
2628  %c = and i1 %a, %b
2629  ret i1 %c
2630}
2631
2632; x <u 23 && x >s 17
2633
2634define i1 @and_ult_sgt_swap(i8 %x) {
2635; CHECK-LABEL: @and_ult_sgt_swap(
2636; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2637; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2638; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2639; CHECK-NEXT:    ret i1 [[C]]
2640;
2641  %a = icmp ult i8 %x, 23
2642  %b = icmp sgt i8 %x, 17
2643  %c = and i1 %a, %b
2644  ret i1 %c
2645}
2646
2647; x <u 23 && x <=s 17
2648
2649define i1 @and_ult_sle_swap(i8 %x) {
2650; CHECK-LABEL: @and_ult_sle_swap(
2651; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2652; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
2653; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2654; CHECK-NEXT:    ret i1 [[C]]
2655;
2656  %a = icmp ult i8 %x, 23
2657  %b = icmp sle i8 %x, 17
2658  %c = and i1 %a, %b
2659  ret i1 %c
2660}
2661
2662; x <u 23 && x <s 17
2663
2664define i1 @and_ult_slt_swap(i8 %x) {
2665; CHECK-LABEL: @and_ult_slt_swap(
2666; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2667; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
2668; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2669; CHECK-NEXT:    ret i1 [[C]]
2670;
2671  %a = icmp ult i8 %x, 23
2672  %b = icmp slt i8 %x, 17
2673  %c = and i1 %a, %b
2674  ret i1 %c
2675}
2676
2677; x <u 23 && x >=u 17
2678
2679define i1 @and_ult_uge_swap(i8 %x) {
2680; CHECK-LABEL: @and_ult_uge_swap(
2681; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2682; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
2683; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2684; CHECK-NEXT:    ret i1 [[C]]
2685;
2686  %a = icmp ult i8 %x, 23
2687  %b = icmp uge i8 %x, 17
2688  %c = and i1 %a, %b
2689  ret i1 %c
2690}
2691
2692; x <u 23 && x >u 17
2693
2694define i1 @and_ult_ugt_swap(i8 %x) {
2695; CHECK-LABEL: @and_ult_ugt_swap(
2696; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
2697; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
2698; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2699; CHECK-NEXT:    ret i1 [[C]]
2700;
2701  %a = icmp ult i8 %x, 23
2702  %b = icmp ugt i8 %x, 17
2703  %c = and i1 %a, %b
2704  ret i1 %c
2705}
2706
2707; x <u 23 && x <=u 17
2708
2709define i1 @and_ult_ule_swap(i8 %x) {
2710; CHECK-LABEL: @and_ult_ule_swap(
2711; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
2712; CHECK-NEXT:    ret i1 [[B]]
2713;
2714  %a = icmp ult i8 %x, 23
2715  %b = icmp ule i8 %x, 17
2716  %c = and i1 %a, %b
2717  ret i1 %c
2718}
2719
2720; x <u 23 && x <u 17
2721
2722define i1 @and_ult_ult_swap(i8 %x) {
2723; CHECK-LABEL: @and_ult_ult_swap(
2724; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
2725; CHECK-NEXT:    ret i1 [[B]]
2726;
2727  %a = icmp ult i8 %x, 23
2728  %b = icmp ult i8 %x, 17
2729  %c = and i1 %a, %b
2730  ret i1 %c
2731}
2732
2733; eq
2734; x == 13 || x == 17
2735
2736define i1 @or_eq_eq(i8 %x) {
2737; CHECK-LABEL: @or_eq_eq(
2738; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
2739; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
2740; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2741; CHECK-NEXT:    ret i1 [[C]]
2742;
2743  %a = icmp eq i8 %x, 13
2744  %b = icmp eq i8 %x, 17
2745  %c = or i1 %a, %b
2746  ret i1 %c
2747}
2748
2749; x == 13 || x != 17
2750
2751define i1 @or_eq_ne(i8 %x) {
2752; CHECK-LABEL: @or_eq_ne(
2753; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
2754; CHECK-NEXT:    ret i1 [[B]]
2755;
2756  %a = icmp eq i8 %x, 13
2757  %b = icmp ne i8 %x, 17
2758  %c = or i1 %a, %b
2759  ret i1 %c
2760}
2761
2762; x == 13 || x >=s 17
2763
2764define i1 @or_eq_sge(i8 %x) {
2765; CHECK-LABEL: @or_eq_sge(
2766; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
2767; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
2768; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2769; CHECK-NEXT:    ret i1 [[C]]
2770;
2771  %a = icmp eq i8 %x, 13
2772  %b = icmp sge i8 %x, 17
2773  %c = or i1 %a, %b
2774  ret i1 %c
2775}
2776
2777; x == 13 || x >s 17
2778
2779define i1 @or_eq_sgt(i8 %x) {
2780; CHECK-LABEL: @or_eq_sgt(
2781; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
2782; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
2783; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2784; CHECK-NEXT:    ret i1 [[C]]
2785;
2786  %a = icmp eq i8 %x, 13
2787  %b = icmp sgt i8 %x, 17
2788  %c = or i1 %a, %b
2789  ret i1 %c
2790}
2791
2792; x == 13 || x <=s 17
2793
2794define i1 @or_eq_sle(i8 %x) {
2795; CHECK-LABEL: @or_eq_sle(
2796; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
2797; CHECK-NEXT:    ret i1 [[B]]
2798;
2799  %a = icmp eq i8 %x, 13
2800  %b = icmp sle i8 %x, 17
2801  %c = or i1 %a, %b
2802  ret i1 %c
2803}
2804
2805; x == 13 || x <s 17
2806
2807define i1 @or_eq_slt(i8 %x) {
2808; CHECK-LABEL: @or_eq_slt(
2809; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
2810; CHECK-NEXT:    ret i1 [[B]]
2811;
2812  %a = icmp eq i8 %x, 13
2813  %b = icmp slt i8 %x, 17
2814  %c = or i1 %a, %b
2815  ret i1 %c
2816}
2817
2818; x == 13 || x >=u 17
2819
2820define i1 @or_eq_uge(i8 %x) {
2821; CHECK-LABEL: @or_eq_uge(
2822; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
2823; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
2824; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2825; CHECK-NEXT:    ret i1 [[C]]
2826;
2827  %a = icmp eq i8 %x, 13
2828  %b = icmp uge i8 %x, 17
2829  %c = or i1 %a, %b
2830  ret i1 %c
2831}
2832
2833; x == 13 || x >u 17
2834
2835define i1 @or_eq_ugt(i8 %x) {
2836; CHECK-LABEL: @or_eq_ugt(
2837; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 13
2838; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
2839; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2840; CHECK-NEXT:    ret i1 [[C]]
2841;
2842  %a = icmp eq i8 %x, 13
2843  %b = icmp ugt i8 %x, 17
2844  %c = or i1 %a, %b
2845  ret i1 %c
2846}
2847
2848; x == 13 || x <=u 17
2849
2850define i1 @or_eq_ule(i8 %x) {
2851; CHECK-LABEL: @or_eq_ule(
2852; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
2853; CHECK-NEXT:    ret i1 [[B]]
2854;
2855  %a = icmp eq i8 %x, 13
2856  %b = icmp ule i8 %x, 17
2857  %c = or i1 %a, %b
2858  ret i1 %c
2859}
2860
2861; x == 13 || x <u 17
2862
2863define i1 @or_eq_ult(i8 %x) {
2864; CHECK-LABEL: @or_eq_ult(
2865; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
2866; CHECK-NEXT:    ret i1 [[B]]
2867;
2868  %a = icmp eq i8 %x, 13
2869  %b = icmp ult i8 %x, 17
2870  %c = or i1 %a, %b
2871  ret i1 %c
2872}
2873
2874; ne
2875; x != 13 || x == 17
2876
2877define i1 @or_ne_eq(i8 %x) {
2878; CHECK-LABEL: @or_ne_eq(
2879; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
2880; CHECK-NEXT:    ret i1 [[A]]
2881;
2882  %a = icmp ne i8 %x, 13
2883  %b = icmp eq i8 %x, 17
2884  %c = or i1 %a, %b
2885  ret i1 %c
2886}
2887
2888; x != 13 || x != 17
2889
2890define i1 @or_ne_ne(i8 %x) {
2891; CHECK-LABEL: @or_ne_ne(
2892; CHECK-NEXT:    ret i1 true
2893;
2894  %a = icmp ne i8 %x, 13
2895  %b = icmp ne i8 %x, 17
2896  %c = or i1 %a, %b
2897  ret i1 %c
2898}
2899
2900; x != 13 || x >=s 17
2901
2902define i1 @or_ne_sge(i8 %x) {
2903; CHECK-LABEL: @or_ne_sge(
2904; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
2905; CHECK-NEXT:    ret i1 [[A]]
2906;
2907  %a = icmp ne i8 %x, 13
2908  %b = icmp sge i8 %x, 17
2909  %c = or i1 %a, %b
2910  ret i1 %c
2911}
2912
2913; x != 13 || x >s 17
2914
2915define i1 @or_ne_sgt(i8 %x) {
2916; CHECK-LABEL: @or_ne_sgt(
2917; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
2918; CHECK-NEXT:    ret i1 [[A]]
2919;
2920  %a = icmp ne i8 %x, 13
2921  %b = icmp sgt i8 %x, 17
2922  %c = or i1 %a, %b
2923  ret i1 %c
2924}
2925
2926; x != 13 || x <=s 17
2927
2928define i1 @or_ne_sle(i8 %x) {
2929; CHECK-LABEL: @or_ne_sle(
2930; CHECK-NEXT:    ret i1 true
2931;
2932  %a = icmp ne i8 %x, 13
2933  %b = icmp sle i8 %x, 17
2934  %c = or i1 %a, %b
2935  ret i1 %c
2936}
2937
2938; x != 13 || x <s 17
2939
2940define i1 @or_ne_slt(i8 %x) {
2941; CHECK-LABEL: @or_ne_slt(
2942; CHECK-NEXT:    ret i1 true
2943;
2944  %a = icmp ne i8 %x, 13
2945  %b = icmp slt i8 %x, 17
2946  %c = or i1 %a, %b
2947  ret i1 %c
2948}
2949
2950; x != 13 || x >=u 17
2951
2952define i1 @or_ne_uge(i8 %x) {
2953; CHECK-LABEL: @or_ne_uge(
2954; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
2955; CHECK-NEXT:    ret i1 [[A]]
2956;
2957  %a = icmp ne i8 %x, 13
2958  %b = icmp uge i8 %x, 17
2959  %c = or i1 %a, %b
2960  ret i1 %c
2961}
2962
2963; x != 13 || x >u 17
2964
2965define i1 @or_ne_ugt(i8 %x) {
2966; CHECK-LABEL: @or_ne_ugt(
2967; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 13
2968; CHECK-NEXT:    ret i1 [[A]]
2969;
2970  %a = icmp ne i8 %x, 13
2971  %b = icmp ugt i8 %x, 17
2972  %c = or i1 %a, %b
2973  ret i1 %c
2974}
2975
2976; x != 13 || x <=u 17
2977
2978define i1 @or_ne_ule(i8 %x) {
2979; CHECK-LABEL: @or_ne_ule(
2980; CHECK-NEXT:    ret i1 true
2981;
2982  %a = icmp ne i8 %x, 13
2983  %b = icmp ule i8 %x, 17
2984  %c = or i1 %a, %b
2985  ret i1 %c
2986}
2987
2988; x != 13 || x <u 17
2989
2990define i1 @or_ne_ult(i8 %x) {
2991; CHECK-LABEL: @or_ne_ult(
2992; CHECK-NEXT:    ret i1 true
2993;
2994  %a = icmp ne i8 %x, 13
2995  %b = icmp ult i8 %x, 17
2996  %c = or i1 %a, %b
2997  ret i1 %c
2998}
2999
3000; sge
3001; x >=s 13 || x == 17
3002
3003define i1 @or_sge_eq(i8 %x) {
3004; CHECK-LABEL: @or_sge_eq(
3005; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3006; CHECK-NEXT:    ret i1 [[A]]
3007;
3008  %a = icmp sge i8 %x, 13
3009  %b = icmp eq i8 %x, 17
3010  %c = or i1 %a, %b
3011  ret i1 %c
3012}
3013
3014; x >=s 13 || x != 17
3015
3016define i1 @or_sge_ne(i8 %x) {
3017; CHECK-LABEL: @or_sge_ne(
3018; CHECK-NEXT:    ret i1 true
3019;
3020  %a = icmp sge i8 %x, 13
3021  %b = icmp ne i8 %x, 17
3022  %c = or i1 %a, %b
3023  ret i1 %c
3024}
3025
3026; x >=s 13 || x >=s 17
3027
3028define i1 @or_sge_sge(i8 %x) {
3029; CHECK-LABEL: @or_sge_sge(
3030; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3031; CHECK-NEXT:    ret i1 [[A]]
3032;
3033  %a = icmp sge i8 %x, 13
3034  %b = icmp sge i8 %x, 17
3035  %c = or i1 %a, %b
3036  ret i1 %c
3037}
3038
3039; x >=s 13 || x >s 17
3040
3041define i1 @or_sge_sgt(i8 %x) {
3042; CHECK-LABEL: @or_sge_sgt(
3043; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3044; CHECK-NEXT:    ret i1 [[A]]
3045;
3046  %a = icmp sge i8 %x, 13
3047  %b = icmp sgt i8 %x, 17
3048  %c = or i1 %a, %b
3049  ret i1 %c
3050}
3051
3052; x >=s 13 || x <=s 17
3053
3054define i1 @or_sge_sle(i8 %x) {
3055; CHECK-LABEL: @or_sge_sle(
3056; CHECK-NEXT:    ret i1 true
3057;
3058  %a = icmp sge i8 %x, 13
3059  %b = icmp sle i8 %x, 17
3060  %c = or i1 %a, %b
3061  ret i1 %c
3062}
3063
3064; x >=s 13 || x <s 17
3065
3066define i1 @or_sge_slt(i8 %x) {
3067; CHECK-LABEL: @or_sge_slt(
3068; CHECK-NEXT:    ret i1 true
3069;
3070  %a = icmp sge i8 %x, 13
3071  %b = icmp slt i8 %x, 17
3072  %c = or i1 %a, %b
3073  ret i1 %c
3074}
3075
3076; x >=s 13 || x >=u 17
3077
3078define i1 @or_sge_uge(i8 %x) {
3079; CHECK-LABEL: @or_sge_uge(
3080; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3081; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
3082; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3083; CHECK-NEXT:    ret i1 [[C]]
3084;
3085  %a = icmp sge i8 %x, 13
3086  %b = icmp uge i8 %x, 17
3087  %c = or i1 %a, %b
3088  ret i1 %c
3089}
3090
3091; x >=s 13 || x >u 17
3092
3093define i1 @or_sge_ugt(i8 %x) {
3094; CHECK-LABEL: @or_sge_ugt(
3095; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3096; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
3097; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3098; CHECK-NEXT:    ret i1 [[C]]
3099;
3100  %a = icmp sge i8 %x, 13
3101  %b = icmp ugt i8 %x, 17
3102  %c = or i1 %a, %b
3103  ret i1 %c
3104}
3105
3106; x >=s 13 || x <=u 17
3107
3108define i1 @or_sge_ule(i8 %x) {
3109; CHECK-LABEL: @or_sge_ule(
3110; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3111; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
3112; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3113; CHECK-NEXT:    ret i1 [[C]]
3114;
3115  %a = icmp sge i8 %x, 13
3116  %b = icmp ule i8 %x, 17
3117  %c = or i1 %a, %b
3118  ret i1 %c
3119}
3120
3121; x >=s 13 || x <u 17
3122
3123define i1 @or_sge_ult(i8 %x) {
3124; CHECK-LABEL: @or_sge_ult(
3125; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 13
3126; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
3127; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3128; CHECK-NEXT:    ret i1 [[C]]
3129;
3130  %a = icmp sge i8 %x, 13
3131  %b = icmp ult i8 %x, 17
3132  %c = or i1 %a, %b
3133  ret i1 %c
3134}
3135
3136; sgt
3137; x >s 13 || x == 17
3138
3139define i1 @or_sgt_eq(i8 %x) {
3140; CHECK-LABEL: @or_sgt_eq(
3141; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3142; CHECK-NEXT:    ret i1 [[A]]
3143;
3144  %a = icmp sgt i8 %x, 13
3145  %b = icmp eq i8 %x, 17
3146  %c = or i1 %a, %b
3147  ret i1 %c
3148}
3149
3150; x >s 13 || x != 17
3151
3152define i1 @or_sgt_ne(i8 %x) {
3153; CHECK-LABEL: @or_sgt_ne(
3154; CHECK-NEXT:    ret i1 true
3155;
3156  %a = icmp sgt i8 %x, 13
3157  %b = icmp ne i8 %x, 17
3158  %c = or i1 %a, %b
3159  ret i1 %c
3160}
3161
3162; x >s 13 || x >=s 17
3163
3164define i1 @or_sgt_sge(i8 %x) {
3165; CHECK-LABEL: @or_sgt_sge(
3166; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3167; CHECK-NEXT:    ret i1 [[A]]
3168;
3169  %a = icmp sgt i8 %x, 13
3170  %b = icmp sge i8 %x, 17
3171  %c = or i1 %a, %b
3172  ret i1 %c
3173}
3174
3175; x >s 13 || x >s 17
3176
3177define i1 @or_sgt_sgt(i8 %x) {
3178; CHECK-LABEL: @or_sgt_sgt(
3179; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3180; CHECK-NEXT:    ret i1 [[A]]
3181;
3182  %a = icmp sgt i8 %x, 13
3183  %b = icmp sgt i8 %x, 17
3184  %c = or i1 %a, %b
3185  ret i1 %c
3186}
3187
3188; x >s 13 || x <=s 17
3189
3190define i1 @or_sgt_sle(i8 %x) {
3191; CHECK-LABEL: @or_sgt_sle(
3192; CHECK-NEXT:    ret i1 true
3193;
3194  %a = icmp sgt i8 %x, 13
3195  %b = icmp sle i8 %x, 17
3196  %c = or i1 %a, %b
3197  ret i1 %c
3198}
3199
3200; x >s 13 || x <s 17
3201
3202define i1 @or_sgt_slt(i8 %x) {
3203; CHECK-LABEL: @or_sgt_slt(
3204; CHECK-NEXT:    ret i1 true
3205;
3206  %a = icmp sgt i8 %x, 13
3207  %b = icmp slt i8 %x, 17
3208  %c = or i1 %a, %b
3209  ret i1 %c
3210}
3211
3212; x >s 13 || x >=u 17
3213
3214define i1 @or_sgt_uge(i8 %x) {
3215; CHECK-LABEL: @or_sgt_uge(
3216; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3217; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
3218; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3219; CHECK-NEXT:    ret i1 [[C]]
3220;
3221  %a = icmp sgt i8 %x, 13
3222  %b = icmp uge i8 %x, 17
3223  %c = or i1 %a, %b
3224  ret i1 %c
3225}
3226
3227; x >s 13 || x >u 17
3228
3229define i1 @or_sgt_ugt(i8 %x) {
3230; CHECK-LABEL: @or_sgt_ugt(
3231; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3232; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
3233; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3234; CHECK-NEXT:    ret i1 [[C]]
3235;
3236  %a = icmp sgt i8 %x, 13
3237  %b = icmp ugt i8 %x, 17
3238  %c = or i1 %a, %b
3239  ret i1 %c
3240}
3241
3242; x >s 13 || x <=u 17
3243
3244define i1 @or_sgt_ule(i8 %x) {
3245; CHECK-LABEL: @or_sgt_ule(
3246; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3247; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
3248; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3249; CHECK-NEXT:    ret i1 [[C]]
3250;
3251  %a = icmp sgt i8 %x, 13
3252  %b = icmp ule i8 %x, 17
3253  %c = or i1 %a, %b
3254  ret i1 %c
3255}
3256
3257; x >s 13 || x <u 17
3258
3259define i1 @or_sgt_ult(i8 %x) {
3260; CHECK-LABEL: @or_sgt_ult(
3261; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 13
3262; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
3263; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3264; CHECK-NEXT:    ret i1 [[C]]
3265;
3266  %a = icmp sgt i8 %x, 13
3267  %b = icmp ult i8 %x, 17
3268  %c = or i1 %a, %b
3269  ret i1 %c
3270}
3271
3272; sle
3273; x <=s 13 || x == 17
3274
3275define i1 @or_sle_eq(i8 %x) {
3276; CHECK-LABEL: @or_sle_eq(
3277; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3278; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
3279; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3280; CHECK-NEXT:    ret i1 [[C]]
3281;
3282  %a = icmp sle i8 %x, 13
3283  %b = icmp eq i8 %x, 17
3284  %c = or i1 %a, %b
3285  ret i1 %c
3286}
3287
3288; x <=s 13 || x != 17
3289
3290define i1 @or_sle_ne(i8 %x) {
3291; CHECK-LABEL: @or_sle_ne(
3292; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
3293; CHECK-NEXT:    ret i1 [[B]]
3294;
3295  %a = icmp sle i8 %x, 13
3296  %b = icmp ne i8 %x, 17
3297  %c = or i1 %a, %b
3298  ret i1 %c
3299}
3300
3301; x <=s 13 || x >=s 17
3302
3303define i1 @or_sle_sge(i8 %x) {
3304; CHECK-LABEL: @or_sle_sge(
3305; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3306; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
3307; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3308; CHECK-NEXT:    ret i1 [[C]]
3309;
3310  %a = icmp sle i8 %x, 13
3311  %b = icmp sge i8 %x, 17
3312  %c = or i1 %a, %b
3313  ret i1 %c
3314}
3315
3316; x <=s 13 || x >s 17
3317
3318define i1 @or_sle_sgt(i8 %x) {
3319; CHECK-LABEL: @or_sle_sgt(
3320; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3321; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
3322; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3323; CHECK-NEXT:    ret i1 [[C]]
3324;
3325  %a = icmp sle i8 %x, 13
3326  %b = icmp sgt i8 %x, 17
3327  %c = or i1 %a, %b
3328  ret i1 %c
3329}
3330
3331; x <=s 13 || x <=s 17
3332
3333define i1 @or_sle_sle(i8 %x) {
3334; CHECK-LABEL: @or_sle_sle(
3335; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
3336; CHECK-NEXT:    ret i1 [[B]]
3337;
3338  %a = icmp sle i8 %x, 13
3339  %b = icmp sle i8 %x, 17
3340  %c = or i1 %a, %b
3341  ret i1 %c
3342}
3343
3344; x <=s 13 || x <s 17
3345
3346define i1 @or_sle_slt(i8 %x) {
3347; CHECK-LABEL: @or_sle_slt(
3348; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
3349; CHECK-NEXT:    ret i1 [[B]]
3350;
3351  %a = icmp sle i8 %x, 13
3352  %b = icmp slt i8 %x, 17
3353  %c = or i1 %a, %b
3354  ret i1 %c
3355}
3356
3357; x <=s 13 || x >=u 17
3358
3359define i1 @or_sle_uge(i8 %x) {
3360; CHECK-LABEL: @or_sle_uge(
3361; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3362; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
3363; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3364; CHECK-NEXT:    ret i1 [[C]]
3365;
3366  %a = icmp sle i8 %x, 13
3367  %b = icmp uge i8 %x, 17
3368  %c = or i1 %a, %b
3369  ret i1 %c
3370}
3371
3372; x <=s 13 || x >u 17
3373
3374define i1 @or_sle_ugt(i8 %x) {
3375; CHECK-LABEL: @or_sle_ugt(
3376; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3377; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
3378; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3379; CHECK-NEXT:    ret i1 [[C]]
3380;
3381  %a = icmp sle i8 %x, 13
3382  %b = icmp ugt i8 %x, 17
3383  %c = or i1 %a, %b
3384  ret i1 %c
3385}
3386
3387; x <=s 13 || x <=u 17
3388
3389define i1 @or_sle_ule(i8 %x) {
3390; CHECK-LABEL: @or_sle_ule(
3391; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3392; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
3393; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3394; CHECK-NEXT:    ret i1 [[C]]
3395;
3396  %a = icmp sle i8 %x, 13
3397  %b = icmp ule i8 %x, 17
3398  %c = or i1 %a, %b
3399  ret i1 %c
3400}
3401
3402; x <=s 13 || x <u 17
3403
3404define i1 @or_sle_ult(i8 %x) {
3405; CHECK-LABEL: @or_sle_ult(
3406; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 13
3407; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
3408; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3409; CHECK-NEXT:    ret i1 [[C]]
3410;
3411  %a = icmp sle i8 %x, 13
3412  %b = icmp ult i8 %x, 17
3413  %c = or i1 %a, %b
3414  ret i1 %c
3415}
3416
3417; slt
3418; x <s 13 || x == 17
3419
3420define i1 @or_slt_eq(i8 %x) {
3421; CHECK-LABEL: @or_slt_eq(
3422; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3423; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
3424; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3425; CHECK-NEXT:    ret i1 [[C]]
3426;
3427  %a = icmp slt i8 %x, 13
3428  %b = icmp eq i8 %x, 17
3429  %c = or i1 %a, %b
3430  ret i1 %c
3431}
3432
3433; x <s 13 || x != 17
3434
3435define i1 @or_slt_ne(i8 %x) {
3436; CHECK-LABEL: @or_slt_ne(
3437; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
3438; CHECK-NEXT:    ret i1 [[B]]
3439;
3440  %a = icmp slt i8 %x, 13
3441  %b = icmp ne i8 %x, 17
3442  %c = or i1 %a, %b
3443  ret i1 %c
3444}
3445
3446; x <s 13 || x >=s 17
3447
3448define i1 @or_slt_sge(i8 %x) {
3449; CHECK-LABEL: @or_slt_sge(
3450; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3451; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
3452; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3453; CHECK-NEXT:    ret i1 [[C]]
3454;
3455  %a = icmp slt i8 %x, 13
3456  %b = icmp sge i8 %x, 17
3457  %c = or i1 %a, %b
3458  ret i1 %c
3459}
3460
3461; x <s 13 || x >s 17
3462
3463define i1 @or_slt_sgt(i8 %x) {
3464; CHECK-LABEL: @or_slt_sgt(
3465; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3466; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
3467; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3468; CHECK-NEXT:    ret i1 [[C]]
3469;
3470  %a = icmp slt i8 %x, 13
3471  %b = icmp sgt i8 %x, 17
3472  %c = or i1 %a, %b
3473  ret i1 %c
3474}
3475
3476; x <s 13 || x <=s 17
3477
3478define i1 @or_slt_sle(i8 %x) {
3479; CHECK-LABEL: @or_slt_sle(
3480; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
3481; CHECK-NEXT:    ret i1 [[B]]
3482;
3483  %a = icmp slt i8 %x, 13
3484  %b = icmp sle i8 %x, 17
3485  %c = or i1 %a, %b
3486  ret i1 %c
3487}
3488
3489; x <s 13 || x <s 17
3490
3491define i1 @or_slt_slt(i8 %x) {
3492; CHECK-LABEL: @or_slt_slt(
3493; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
3494; CHECK-NEXT:    ret i1 [[B]]
3495;
3496  %a = icmp slt i8 %x, 13
3497  %b = icmp slt i8 %x, 17
3498  %c = or i1 %a, %b
3499  ret i1 %c
3500}
3501
3502; x <s 13 || x >=u 17
3503
3504define i1 @or_slt_uge(i8 %x) {
3505; CHECK-LABEL: @or_slt_uge(
3506; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3507; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
3508; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3509; CHECK-NEXT:    ret i1 [[C]]
3510;
3511  %a = icmp slt i8 %x, 13
3512  %b = icmp uge i8 %x, 17
3513  %c = or i1 %a, %b
3514  ret i1 %c
3515}
3516
3517; x <s 13 || x >u 17
3518
3519define i1 @or_slt_ugt(i8 %x) {
3520; CHECK-LABEL: @or_slt_ugt(
3521; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3522; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
3523; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3524; CHECK-NEXT:    ret i1 [[C]]
3525;
3526  %a = icmp slt i8 %x, 13
3527  %b = icmp ugt i8 %x, 17
3528  %c = or i1 %a, %b
3529  ret i1 %c
3530}
3531
3532; x <s 13 || x <=u 17
3533
3534define i1 @or_slt_ule(i8 %x) {
3535; CHECK-LABEL: @or_slt_ule(
3536; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3537; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
3538; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3539; CHECK-NEXT:    ret i1 [[C]]
3540;
3541  %a = icmp slt i8 %x, 13
3542  %b = icmp ule i8 %x, 17
3543  %c = or i1 %a, %b
3544  ret i1 %c
3545}
3546
3547; x <s 13 || x <u 17
3548
3549define i1 @or_slt_ult(i8 %x) {
3550; CHECK-LABEL: @or_slt_ult(
3551; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 13
3552; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
3553; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3554; CHECK-NEXT:    ret i1 [[C]]
3555;
3556  %a = icmp slt i8 %x, 13
3557  %b = icmp ult i8 %x, 17
3558  %c = or i1 %a, %b
3559  ret i1 %c
3560}
3561
3562; uge
3563; x >=u 13 || x == 17
3564
3565define i1 @or_uge_eq(i8 %x) {
3566; CHECK-LABEL: @or_uge_eq(
3567; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
3568; CHECK-NEXT:    ret i1 [[A]]
3569;
3570  %a = icmp uge i8 %x, 13
3571  %b = icmp eq i8 %x, 17
3572  %c = or i1 %a, %b
3573  ret i1 %c
3574}
3575
3576; x >=u 13 || x != 17
3577
3578define i1 @or_uge_ne(i8 %x) {
3579; CHECK-LABEL: @or_uge_ne(
3580; CHECK-NEXT:    ret i1 true
3581;
3582  %a = icmp uge i8 %x, 13
3583  %b = icmp ne i8 %x, 17
3584  %c = or i1 %a, %b
3585  ret i1 %c
3586}
3587
3588; x >=u 13 || x >=s 17
3589
3590define i1 @or_uge_sge(i8 %x) {
3591; CHECK-LABEL: @or_uge_sge(
3592; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
3593; CHECK-NEXT:    ret i1 [[A]]
3594;
3595  %a = icmp uge i8 %x, 13
3596  %b = icmp sge i8 %x, 17
3597  %c = or i1 %a, %b
3598  ret i1 %c
3599}
3600
3601; x >=u 13 || x >s 17
3602
3603define i1 @or_uge_sgt(i8 %x) {
3604; CHECK-LABEL: @or_uge_sgt(
3605; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
3606; CHECK-NEXT:    ret i1 [[A]]
3607;
3608  %a = icmp uge i8 %x, 13
3609  %b = icmp sgt i8 %x, 17
3610  %c = or i1 %a, %b
3611  ret i1 %c
3612}
3613
3614; x >=u 13 || x <=s 17
3615
3616define i1 @or_uge_sle(i8 %x) {
3617; CHECK-LABEL: @or_uge_sle(
3618; CHECK-NEXT:    ret i1 true
3619;
3620  %a = icmp uge i8 %x, 13
3621  %b = icmp sle i8 %x, 17
3622  %c = or i1 %a, %b
3623  ret i1 %c
3624}
3625
3626; x >=u 13 || x <s 17
3627
3628define i1 @or_uge_slt(i8 %x) {
3629; CHECK-LABEL: @or_uge_slt(
3630; CHECK-NEXT:    ret i1 true
3631;
3632  %a = icmp uge i8 %x, 13
3633  %b = icmp slt i8 %x, 17
3634  %c = or i1 %a, %b
3635  ret i1 %c
3636}
3637
3638; x >=u 13 || x >=u 17
3639
3640define i1 @or_uge_uge(i8 %x) {
3641; CHECK-LABEL: @or_uge_uge(
3642; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
3643; CHECK-NEXT:    ret i1 [[A]]
3644;
3645  %a = icmp uge i8 %x, 13
3646  %b = icmp uge i8 %x, 17
3647  %c = or i1 %a, %b
3648  ret i1 %c
3649}
3650
3651; x >=u 13 || x >u 17
3652
3653define i1 @or_uge_ugt(i8 %x) {
3654; CHECK-LABEL: @or_uge_ugt(
3655; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 13
3656; CHECK-NEXT:    ret i1 [[A]]
3657;
3658  %a = icmp uge i8 %x, 13
3659  %b = icmp ugt i8 %x, 17
3660  %c = or i1 %a, %b
3661  ret i1 %c
3662}
3663
3664; x >=u 13 || x <=u 17
3665
3666define i1 @or_uge_ule(i8 %x) {
3667; CHECK-LABEL: @or_uge_ule(
3668; CHECK-NEXT:    ret i1 true
3669;
3670  %a = icmp uge i8 %x, 13
3671  %b = icmp ule i8 %x, 17
3672  %c = or i1 %a, %b
3673  ret i1 %c
3674}
3675
3676; x >=u 13 || x <u 17
3677
3678define i1 @or_uge_ult(i8 %x) {
3679; CHECK-LABEL: @or_uge_ult(
3680; CHECK-NEXT:    ret i1 true
3681;
3682  %a = icmp uge i8 %x, 13
3683  %b = icmp ult i8 %x, 17
3684  %c = or i1 %a, %b
3685  ret i1 %c
3686}
3687
3688; ugt
3689; x >u 13 || x == 17
3690
3691define i1 @or_ugt_eq(i8 %x) {
3692; CHECK-LABEL: @or_ugt_eq(
3693; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
3694; CHECK-NEXT:    ret i1 [[A]]
3695;
3696  %a = icmp ugt i8 %x, 13
3697  %b = icmp eq i8 %x, 17
3698  %c = or i1 %a, %b
3699  ret i1 %c
3700}
3701
3702; x >u 13 || x != 17
3703
3704define i1 @or_ugt_ne(i8 %x) {
3705; CHECK-LABEL: @or_ugt_ne(
3706; CHECK-NEXT:    ret i1 true
3707;
3708  %a = icmp ugt i8 %x, 13
3709  %b = icmp ne i8 %x, 17
3710  %c = or i1 %a, %b
3711  ret i1 %c
3712}
3713
3714; x >u 13 || x >=s 17
3715
3716define i1 @or_ugt_sge(i8 %x) {
3717; CHECK-LABEL: @or_ugt_sge(
3718; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
3719; CHECK-NEXT:    ret i1 [[A]]
3720;
3721  %a = icmp ugt i8 %x, 13
3722  %b = icmp sge i8 %x, 17
3723  %c = or i1 %a, %b
3724  ret i1 %c
3725}
3726
3727; x >u 13 || x >s 17
3728
3729define i1 @or_ugt_sgt(i8 %x) {
3730; CHECK-LABEL: @or_ugt_sgt(
3731; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
3732; CHECK-NEXT:    ret i1 [[A]]
3733;
3734  %a = icmp ugt i8 %x, 13
3735  %b = icmp sgt i8 %x, 17
3736  %c = or i1 %a, %b
3737  ret i1 %c
3738}
3739
3740; x >u 13 || x <=s 17
3741
3742define i1 @or_ugt_sle(i8 %x) {
3743; CHECK-LABEL: @or_ugt_sle(
3744; CHECK-NEXT:    ret i1 true
3745;
3746  %a = icmp ugt i8 %x, 13
3747  %b = icmp sle i8 %x, 17
3748  %c = or i1 %a, %b
3749  ret i1 %c
3750}
3751
3752; x >u 13 || x <s 17
3753
3754define i1 @or_ugt_slt(i8 %x) {
3755; CHECK-LABEL: @or_ugt_slt(
3756; CHECK-NEXT:    ret i1 true
3757;
3758  %a = icmp ugt i8 %x, 13
3759  %b = icmp slt i8 %x, 17
3760  %c = or i1 %a, %b
3761  ret i1 %c
3762}
3763
3764; x >u 13 || x >=u 17
3765
3766define i1 @or_ugt_uge(i8 %x) {
3767; CHECK-LABEL: @or_ugt_uge(
3768; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
3769; CHECK-NEXT:    ret i1 [[A]]
3770;
3771  %a = icmp ugt i8 %x, 13
3772  %b = icmp uge i8 %x, 17
3773  %c = or i1 %a, %b
3774  ret i1 %c
3775}
3776
3777; x >u 13 || x >u 17
3778
3779define i1 @or_ugt_ugt(i8 %x) {
3780; CHECK-LABEL: @or_ugt_ugt(
3781; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 13
3782; CHECK-NEXT:    ret i1 [[A]]
3783;
3784  %a = icmp ugt i8 %x, 13
3785  %b = icmp ugt i8 %x, 17
3786  %c = or i1 %a, %b
3787  ret i1 %c
3788}
3789
3790; x >u 13 || x <=u 17
3791
3792define i1 @or_ugt_ule(i8 %x) {
3793; CHECK-LABEL: @or_ugt_ule(
3794; CHECK-NEXT:    ret i1 true
3795;
3796  %a = icmp ugt i8 %x, 13
3797  %b = icmp ule i8 %x, 17
3798  %c = or i1 %a, %b
3799  ret i1 %c
3800}
3801
3802; x >u 13 || x <u 17
3803
3804define i1 @or_ugt_ult(i8 %x) {
3805; CHECK-LABEL: @or_ugt_ult(
3806; CHECK-NEXT:    ret i1 true
3807;
3808  %a = icmp ugt i8 %x, 13
3809  %b = icmp ult i8 %x, 17
3810  %c = or i1 %a, %b
3811  ret i1 %c
3812}
3813
3814; ule
3815; x <=u 13 || x == 17
3816
3817define i1 @or_ule_eq(i8 %x) {
3818; CHECK-LABEL: @or_ule_eq(
3819; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
3820; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
3821; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3822; CHECK-NEXT:    ret i1 [[C]]
3823;
3824  %a = icmp ule i8 %x, 13
3825  %b = icmp eq i8 %x, 17
3826  %c = or i1 %a, %b
3827  ret i1 %c
3828}
3829
3830; x <=u 13 || x != 17
3831
3832define i1 @or_ule_ne(i8 %x) {
3833; CHECK-LABEL: @or_ule_ne(
3834; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
3835; CHECK-NEXT:    ret i1 [[B]]
3836;
3837  %a = icmp ule i8 %x, 13
3838  %b = icmp ne i8 %x, 17
3839  %c = or i1 %a, %b
3840  ret i1 %c
3841}
3842
3843; x <=u 13 || x >=s 17
3844
3845define i1 @or_ule_sge(i8 %x) {
3846; CHECK-LABEL: @or_ule_sge(
3847; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
3848; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
3849; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3850; CHECK-NEXT:    ret i1 [[C]]
3851;
3852  %a = icmp ule i8 %x, 13
3853  %b = icmp sge i8 %x, 17
3854  %c = or i1 %a, %b
3855  ret i1 %c
3856}
3857
3858; x <=u 13 || x >s 17
3859
3860define i1 @or_ule_sgt(i8 %x) {
3861; CHECK-LABEL: @or_ule_sgt(
3862; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
3863; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
3864; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3865; CHECK-NEXT:    ret i1 [[C]]
3866;
3867  %a = icmp ule i8 %x, 13
3868  %b = icmp sgt i8 %x, 17
3869  %c = or i1 %a, %b
3870  ret i1 %c
3871}
3872
3873; x <=u 13 || x <=s 17
3874
3875define i1 @or_ule_sle(i8 %x) {
3876; CHECK-LABEL: @or_ule_sle(
3877; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
3878; CHECK-NEXT:    ret i1 [[B]]
3879;
3880  %a = icmp ule i8 %x, 13
3881  %b = icmp sle i8 %x, 17
3882  %c = or i1 %a, %b
3883  ret i1 %c
3884}
3885
3886; x <=u 13 || x <s 17
3887
3888define i1 @or_ule_slt(i8 %x) {
3889; CHECK-LABEL: @or_ule_slt(
3890; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
3891; CHECK-NEXT:    ret i1 [[B]]
3892;
3893  %a = icmp ule i8 %x, 13
3894  %b = icmp slt i8 %x, 17
3895  %c = or i1 %a, %b
3896  ret i1 %c
3897}
3898
3899; x <=u 13 || x >=u 17
3900
3901define i1 @or_ule_uge(i8 %x) {
3902; CHECK-LABEL: @or_ule_uge(
3903; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
3904; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
3905; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3906; CHECK-NEXT:    ret i1 [[C]]
3907;
3908  %a = icmp ule i8 %x, 13
3909  %b = icmp uge i8 %x, 17
3910  %c = or i1 %a, %b
3911  ret i1 %c
3912}
3913
3914; x <=u 13 || x >u 17
3915
3916define i1 @or_ule_ugt(i8 %x) {
3917; CHECK-LABEL: @or_ule_ugt(
3918; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 13
3919; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
3920; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3921; CHECK-NEXT:    ret i1 [[C]]
3922;
3923  %a = icmp ule i8 %x, 13
3924  %b = icmp ugt i8 %x, 17
3925  %c = or i1 %a, %b
3926  ret i1 %c
3927}
3928
3929; x <=u 13 || x <=u 17
3930
3931define i1 @or_ule_ule(i8 %x) {
3932; CHECK-LABEL: @or_ule_ule(
3933; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
3934; CHECK-NEXT:    ret i1 [[B]]
3935;
3936  %a = icmp ule i8 %x, 13
3937  %b = icmp ule i8 %x, 17
3938  %c = or i1 %a, %b
3939  ret i1 %c
3940}
3941
3942; x <=u 13 || x <u 17
3943
3944define i1 @or_ule_ult(i8 %x) {
3945; CHECK-LABEL: @or_ule_ult(
3946; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
3947; CHECK-NEXT:    ret i1 [[B]]
3948;
3949  %a = icmp ule i8 %x, 13
3950  %b = icmp ult i8 %x, 17
3951  %c = or i1 %a, %b
3952  ret i1 %c
3953}
3954
3955; ult
3956; x <u 13 || x == 17
3957
3958define i1 @or_ult_eq(i8 %x) {
3959; CHECK-LABEL: @or_ult_eq(
3960; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
3961; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
3962; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3963; CHECK-NEXT:    ret i1 [[C]]
3964;
3965  %a = icmp ult i8 %x, 13
3966  %b = icmp eq i8 %x, 17
3967  %c = or i1 %a, %b
3968  ret i1 %c
3969}
3970
3971; x <u 13 || x != 17
3972
3973define i1 @or_ult_ne(i8 %x) {
3974; CHECK-LABEL: @or_ult_ne(
3975; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
3976; CHECK-NEXT:    ret i1 [[B]]
3977;
3978  %a = icmp ult i8 %x, 13
3979  %b = icmp ne i8 %x, 17
3980  %c = or i1 %a, %b
3981  ret i1 %c
3982}
3983
3984; x <u 13 || x >=s 17
3985
3986define i1 @or_ult_sge(i8 %x) {
3987; CHECK-LABEL: @or_ult_sge(
3988; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
3989; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
3990; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3991; CHECK-NEXT:    ret i1 [[C]]
3992;
3993  %a = icmp ult i8 %x, 13
3994  %b = icmp sge i8 %x, 17
3995  %c = or i1 %a, %b
3996  ret i1 %c
3997}
3998
3999; x <u 13 || x >s 17
4000
4001define i1 @or_ult_sgt(i8 %x) {
4002; CHECK-LABEL: @or_ult_sgt(
4003; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
4004; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
4005; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4006; CHECK-NEXT:    ret i1 [[C]]
4007;
4008  %a = icmp ult i8 %x, 13
4009  %b = icmp sgt i8 %x, 17
4010  %c = or i1 %a, %b
4011  ret i1 %c
4012}
4013
4014; x <u 13 || x <=s 17
4015
4016define i1 @or_ult_sle(i8 %x) {
4017; CHECK-LABEL: @or_ult_sle(
4018; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X:%.*]], 17
4019; CHECK-NEXT:    ret i1 [[B]]
4020;
4021  %a = icmp ult i8 %x, 13
4022  %b = icmp sle i8 %x, 17
4023  %c = or i1 %a, %b
4024  ret i1 %c
4025}
4026
4027; x <u 13 || x <s 17
4028
4029define i1 @or_ult_slt(i8 %x) {
4030; CHECK-LABEL: @or_ult_slt(
4031; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X:%.*]], 17
4032; CHECK-NEXT:    ret i1 [[B]]
4033;
4034  %a = icmp ult i8 %x, 13
4035  %b = icmp slt i8 %x, 17
4036  %c = or i1 %a, %b
4037  ret i1 %c
4038}
4039
4040; x <u 13 || x >=u 17
4041
4042define i1 @or_ult_uge(i8 %x) {
4043; CHECK-LABEL: @or_ult_uge(
4044; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
4045; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X]], 17
4046; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4047; CHECK-NEXT:    ret i1 [[C]]
4048;
4049  %a = icmp ult i8 %x, 13
4050  %b = icmp uge i8 %x, 17
4051  %c = or i1 %a, %b
4052  ret i1 %c
4053}
4054
4055; x <u 13 || x >u 17
4056
4057define i1 @or_ult_ugt(i8 %x) {
4058; CHECK-LABEL: @or_ult_ugt(
4059; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 13
4060; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X]], 17
4061; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4062; CHECK-NEXT:    ret i1 [[C]]
4063;
4064  %a = icmp ult i8 %x, 13
4065  %b = icmp ugt i8 %x, 17
4066  %c = or i1 %a, %b
4067  ret i1 %c
4068}
4069
4070; x <u 13 || x <=u 17
4071
4072define i1 @or_ult_ule(i8 %x) {
4073; CHECK-LABEL: @or_ult_ule(
4074; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X:%.*]], 17
4075; CHECK-NEXT:    ret i1 [[B]]
4076;
4077  %a = icmp ult i8 %x, 13
4078  %b = icmp ule i8 %x, 17
4079  %c = or i1 %a, %b
4080  ret i1 %c
4081}
4082
4083; x <u 13 || x <u 17
4084
4085define i1 @or_ult_ult(i8 %x) {
4086; CHECK-LABEL: @or_ult_ult(
4087; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X:%.*]], 17
4088; CHECK-NEXT:    ret i1 [[B]]
4089;
4090  %a = icmp ult i8 %x, 13
4091  %b = icmp ult i8 %x, 17
4092  %c = or i1 %a, %b
4093  ret i1 %c
4094}
4095
4096; eq
4097; x == 23 || x == 17
4098
4099define i1 @or_eq_eq_swap(i8 %x) {
4100; CHECK-LABEL: @or_eq_eq_swap(
4101; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
4102; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
4103; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4104; CHECK-NEXT:    ret i1 [[C]]
4105;
4106  %a = icmp eq i8 %x, 23
4107  %b = icmp eq i8 %x, 17
4108  %c = or i1 %a, %b
4109  ret i1 %c
4110}
4111
4112; x == 23 || x != 17
4113
4114define i1 @or_eq_ne_swap(i8 %x) {
4115; CHECK-LABEL: @or_eq_ne_swap(
4116; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
4117; CHECK-NEXT:    ret i1 [[B]]
4118;
4119  %a = icmp eq i8 %x, 23
4120  %b = icmp ne i8 %x, 17
4121  %c = or i1 %a, %b
4122  ret i1 %c
4123}
4124
4125; x == 23 || x >=s 17
4126
4127define i1 @or_eq_sge_swap(i8 %x) {
4128; CHECK-LABEL: @or_eq_sge_swap(
4129; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
4130; CHECK-NEXT:    ret i1 [[B]]
4131;
4132  %a = icmp eq i8 %x, 23
4133  %b = icmp sge i8 %x, 17
4134  %c = or i1 %a, %b
4135  ret i1 %c
4136}
4137
4138; x == 23 || x >s 17
4139
4140define i1 @or_eq_sgt_swap(i8 %x) {
4141; CHECK-LABEL: @or_eq_sgt_swap(
4142; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
4143; CHECK-NEXT:    ret i1 [[B]]
4144;
4145  %a = icmp eq i8 %x, 23
4146  %b = icmp sgt i8 %x, 17
4147  %c = or i1 %a, %b
4148  ret i1 %c
4149}
4150
4151; x == 23 || x <=s 17
4152
4153define i1 @or_eq_sle_swap(i8 %x) {
4154; CHECK-LABEL: @or_eq_sle_swap(
4155; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
4156; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
4157; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4158; CHECK-NEXT:    ret i1 [[C]]
4159;
4160  %a = icmp eq i8 %x, 23
4161  %b = icmp sle i8 %x, 17
4162  %c = or i1 %a, %b
4163  ret i1 %c
4164}
4165
4166; x == 23 || x <s 17
4167
4168define i1 @or_eq_slt_swap(i8 %x) {
4169; CHECK-LABEL: @or_eq_slt_swap(
4170; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
4171; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
4172; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4173; CHECK-NEXT:    ret i1 [[C]]
4174;
4175  %a = icmp eq i8 %x, 23
4176  %b = icmp slt i8 %x, 17
4177  %c = or i1 %a, %b
4178  ret i1 %c
4179}
4180
4181; x == 23 || x >=u 17
4182
4183define i1 @or_eq_uge_swap(i8 %x) {
4184; CHECK-LABEL: @or_eq_uge_swap(
4185; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
4186; CHECK-NEXT:    ret i1 [[B]]
4187;
4188  %a = icmp eq i8 %x, 23
4189  %b = icmp uge i8 %x, 17
4190  %c = or i1 %a, %b
4191  ret i1 %c
4192}
4193
4194; x == 23 || x >u 17
4195
4196define i1 @or_eq_ugt_swap(i8 %x) {
4197; CHECK-LABEL: @or_eq_ugt_swap(
4198; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
4199; CHECK-NEXT:    ret i1 [[B]]
4200;
4201  %a = icmp eq i8 %x, 23
4202  %b = icmp ugt i8 %x, 17
4203  %c = or i1 %a, %b
4204  ret i1 %c
4205}
4206
4207; x == 23 || x <=u 17
4208
4209define i1 @or_eq_ule_swap(i8 %x) {
4210; CHECK-LABEL: @or_eq_ule_swap(
4211; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
4212; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
4213; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4214; CHECK-NEXT:    ret i1 [[C]]
4215;
4216  %a = icmp eq i8 %x, 23
4217  %b = icmp ule i8 %x, 17
4218  %c = or i1 %a, %b
4219  ret i1 %c
4220}
4221
4222; x == 23 || x <u 17
4223
4224define i1 @or_eq_ult_swap(i8 %x) {
4225; CHECK-LABEL: @or_eq_ult_swap(
4226; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 [[X:%.*]], 23
4227; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
4228; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4229; CHECK-NEXT:    ret i1 [[C]]
4230;
4231  %a = icmp eq i8 %x, 23
4232  %b = icmp ult i8 %x, 17
4233  %c = or i1 %a, %b
4234  ret i1 %c
4235}
4236
4237; ne
4238; x != 23 || x == 17
4239
4240define i1 @or_ne_eq_swap(i8 %x) {
4241; CHECK-LABEL: @or_ne_eq_swap(
4242; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
4243; CHECK-NEXT:    ret i1 [[A]]
4244;
4245  %a = icmp ne i8 %x, 23
4246  %b = icmp eq i8 %x, 17
4247  %c = or i1 %a, %b
4248  ret i1 %c
4249}
4250
4251; x != 23 || x != 17
4252
4253define i1 @or_ne_ne_swap(i8 %x) {
4254; CHECK-LABEL: @or_ne_ne_swap(
4255; CHECK-NEXT:    ret i1 true
4256;
4257  %a = icmp ne i8 %x, 23
4258  %b = icmp ne i8 %x, 17
4259  %c = or i1 %a, %b
4260  ret i1 %c
4261}
4262
4263; x != 23 || x >=s 17
4264
4265define i1 @or_ne_sge_swap(i8 %x) {
4266; CHECK-LABEL: @or_ne_sge_swap(
4267; CHECK-NEXT:    ret i1 true
4268;
4269  %a = icmp ne i8 %x, 23
4270  %b = icmp sge i8 %x, 17
4271  %c = or i1 %a, %b
4272  ret i1 %c
4273}
4274
4275; x != 23 || x >s 17
4276
4277define i1 @or_ne_sgt_swap(i8 %x) {
4278; CHECK-LABEL: @or_ne_sgt_swap(
4279; CHECK-NEXT:    ret i1 true
4280;
4281  %a = icmp ne i8 %x, 23
4282  %b = icmp sgt i8 %x, 17
4283  %c = or i1 %a, %b
4284  ret i1 %c
4285}
4286
4287; x != 23 || x <=s 17
4288
4289define i1 @or_ne_sle_swap(i8 %x) {
4290; CHECK-LABEL: @or_ne_sle_swap(
4291; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
4292; CHECK-NEXT:    ret i1 [[A]]
4293;
4294  %a = icmp ne i8 %x, 23
4295  %b = icmp sle i8 %x, 17
4296  %c = or i1 %a, %b
4297  ret i1 %c
4298}
4299
4300; x != 23 || x <s 17
4301
4302define i1 @or_ne_slt_swap(i8 %x) {
4303; CHECK-LABEL: @or_ne_slt_swap(
4304; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
4305; CHECK-NEXT:    ret i1 [[A]]
4306;
4307  %a = icmp ne i8 %x, 23
4308  %b = icmp slt i8 %x, 17
4309  %c = or i1 %a, %b
4310  ret i1 %c
4311}
4312
4313; x != 23 || x >=u 17
4314
4315define i1 @or_ne_uge_swap(i8 %x) {
4316; CHECK-LABEL: @or_ne_uge_swap(
4317; CHECK-NEXT:    ret i1 true
4318;
4319  %a = icmp ne i8 %x, 23
4320  %b = icmp uge i8 %x, 17
4321  %c = or i1 %a, %b
4322  ret i1 %c
4323}
4324
4325; x != 23 || x >u 17
4326
4327define i1 @or_ne_ugt_swap(i8 %x) {
4328; CHECK-LABEL: @or_ne_ugt_swap(
4329; CHECK-NEXT:    ret i1 true
4330;
4331  %a = icmp ne i8 %x, 23
4332  %b = icmp ugt i8 %x, 17
4333  %c = or i1 %a, %b
4334  ret i1 %c
4335}
4336
4337; x != 23 || x <=u 17
4338
4339define i1 @or_ne_ule_swap(i8 %x) {
4340; CHECK-LABEL: @or_ne_ule_swap(
4341; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
4342; CHECK-NEXT:    ret i1 [[A]]
4343;
4344  %a = icmp ne i8 %x, 23
4345  %b = icmp ule i8 %x, 17
4346  %c = or i1 %a, %b
4347  ret i1 %c
4348}
4349
4350; x != 23 || x <u 17
4351
4352define i1 @or_ne_ult_swap(i8 %x) {
4353; CHECK-LABEL: @or_ne_ult_swap(
4354; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 [[X:%.*]], 23
4355; CHECK-NEXT:    ret i1 [[A]]
4356;
4357  %a = icmp ne i8 %x, 23
4358  %b = icmp ult i8 %x, 17
4359  %c = or i1 %a, %b
4360  ret i1 %c
4361}
4362
4363; sge
4364; x >=s 23 || x == 17
4365
4366define i1 @or_sge_eq_swap(i8 %x) {
4367; CHECK-LABEL: @or_sge_eq_swap(
4368; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
4369; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
4370; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4371; CHECK-NEXT:    ret i1 [[C]]
4372;
4373  %a = icmp sge i8 %x, 23
4374  %b = icmp eq i8 %x, 17
4375  %c = or i1 %a, %b
4376  ret i1 %c
4377}
4378
4379; x >=s 23 || x != 17
4380
4381define i1 @or_sge_ne_swap(i8 %x) {
4382; CHECK-LABEL: @or_sge_ne_swap(
4383; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
4384; CHECK-NEXT:    ret i1 [[B]]
4385;
4386  %a = icmp sge i8 %x, 23
4387  %b = icmp ne i8 %x, 17
4388  %c = or i1 %a, %b
4389  ret i1 %c
4390}
4391
4392; x >=s 23 || x >=s 17
4393
4394define i1 @or_sge_sge_swap(i8 %x) {
4395; CHECK-LABEL: @or_sge_sge_swap(
4396; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
4397; CHECK-NEXT:    ret i1 [[B]]
4398;
4399  %a = icmp sge i8 %x, 23
4400  %b = icmp sge i8 %x, 17
4401  %c = or i1 %a, %b
4402  ret i1 %c
4403}
4404
4405; x >=s 23 || x >s 17
4406
4407define i1 @or_sge_sgt_swap(i8 %x) {
4408; CHECK-LABEL: @or_sge_sgt_swap(
4409; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
4410; CHECK-NEXT:    ret i1 [[B]]
4411;
4412  %a = icmp sge i8 %x, 23
4413  %b = icmp sgt i8 %x, 17
4414  %c = or i1 %a, %b
4415  ret i1 %c
4416}
4417
4418; x >=s 23 || x <=s 17
4419
4420define i1 @or_sge_sle_swap(i8 %x) {
4421; CHECK-LABEL: @or_sge_sle_swap(
4422; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
4423; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
4424; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4425; CHECK-NEXT:    ret i1 [[C]]
4426;
4427  %a = icmp sge i8 %x, 23
4428  %b = icmp sle i8 %x, 17
4429  %c = or i1 %a, %b
4430  ret i1 %c
4431}
4432
4433; x >=s 23 || x <s 17
4434
4435define i1 @or_sge_slt_swap(i8 %x) {
4436; CHECK-LABEL: @or_sge_slt_swap(
4437; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
4438; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
4439; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4440; CHECK-NEXT:    ret i1 [[C]]
4441;
4442  %a = icmp sge i8 %x, 23
4443  %b = icmp slt i8 %x, 17
4444  %c = or i1 %a, %b
4445  ret i1 %c
4446}
4447
4448; x >=s 23 || x >=u 17
4449
4450define i1 @or_sge_uge_swap(i8 %x) {
4451; CHECK-LABEL: @or_sge_uge_swap(
4452; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
4453; CHECK-NEXT:    ret i1 [[B]]
4454;
4455  %a = icmp sge i8 %x, 23
4456  %b = icmp uge i8 %x, 17
4457  %c = or i1 %a, %b
4458  ret i1 %c
4459}
4460
4461; x >=s 23 || x >u 17
4462
4463define i1 @or_sge_ugt_swap(i8 %x) {
4464; CHECK-LABEL: @or_sge_ugt_swap(
4465; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
4466; CHECK-NEXT:    ret i1 [[B]]
4467;
4468  %a = icmp sge i8 %x, 23
4469  %b = icmp ugt i8 %x, 17
4470  %c = or i1 %a, %b
4471  ret i1 %c
4472}
4473
4474; x >=s 23 || x <=u 17
4475
4476define i1 @or_sge_ule_swap(i8 %x) {
4477; CHECK-LABEL: @or_sge_ule_swap(
4478; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
4479; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
4480; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4481; CHECK-NEXT:    ret i1 [[C]]
4482;
4483  %a = icmp sge i8 %x, 23
4484  %b = icmp ule i8 %x, 17
4485  %c = or i1 %a, %b
4486  ret i1 %c
4487}
4488
4489; x >=s 23 || x <u 17
4490
4491define i1 @or_sge_ult_swap(i8 %x) {
4492; CHECK-LABEL: @or_sge_ult_swap(
4493; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 [[X:%.*]], 23
4494; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
4495; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4496; CHECK-NEXT:    ret i1 [[C]]
4497;
4498  %a = icmp sge i8 %x, 23
4499  %b = icmp ult i8 %x, 17
4500  %c = or i1 %a, %b
4501  ret i1 %c
4502}
4503
4504; sgt
4505; x >s 23 || x == 17
4506
4507define i1 @or_sgt_eq_swap(i8 %x) {
4508; CHECK-LABEL: @or_sgt_eq_swap(
4509; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
4510; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
4511; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4512; CHECK-NEXT:    ret i1 [[C]]
4513;
4514  %a = icmp sgt i8 %x, 23
4515  %b = icmp eq i8 %x, 17
4516  %c = or i1 %a, %b
4517  ret i1 %c
4518}
4519
4520; x >s 23 || x != 17
4521
4522define i1 @or_sgt_ne_swap(i8 %x) {
4523; CHECK-LABEL: @or_sgt_ne_swap(
4524; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
4525; CHECK-NEXT:    ret i1 [[B]]
4526;
4527  %a = icmp sgt i8 %x, 23
4528  %b = icmp ne i8 %x, 17
4529  %c = or i1 %a, %b
4530  ret i1 %c
4531}
4532
4533; x >s 23 || x >=s 17
4534
4535define i1 @or_sgt_sge_swap(i8 %x) {
4536; CHECK-LABEL: @or_sgt_sge_swap(
4537; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X:%.*]], 17
4538; CHECK-NEXT:    ret i1 [[B]]
4539;
4540  %a = icmp sgt i8 %x, 23
4541  %b = icmp sge i8 %x, 17
4542  %c = or i1 %a, %b
4543  ret i1 %c
4544}
4545
4546; x >s 23 || x >s 17
4547
4548define i1 @or_sgt_sgt_swap(i8 %x) {
4549; CHECK-LABEL: @or_sgt_sgt_swap(
4550; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X:%.*]], 17
4551; CHECK-NEXT:    ret i1 [[B]]
4552;
4553  %a = icmp sgt i8 %x, 23
4554  %b = icmp sgt i8 %x, 17
4555  %c = or i1 %a, %b
4556  ret i1 %c
4557}
4558
4559; x >s 23 || x <=s 17
4560
4561define i1 @or_sgt_sle_swap(i8 %x) {
4562; CHECK-LABEL: @or_sgt_sle_swap(
4563; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
4564; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
4565; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4566; CHECK-NEXT:    ret i1 [[C]]
4567;
4568  %a = icmp sgt i8 %x, 23
4569  %b = icmp sle i8 %x, 17
4570  %c = or i1 %a, %b
4571  ret i1 %c
4572}
4573
4574; x >s 23 || x <s 17
4575
4576define i1 @or_sgt_slt_swap(i8 %x) {
4577; CHECK-LABEL: @or_sgt_slt_swap(
4578; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
4579; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
4580; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4581; CHECK-NEXT:    ret i1 [[C]]
4582;
4583  %a = icmp sgt i8 %x, 23
4584  %b = icmp slt i8 %x, 17
4585  %c = or i1 %a, %b
4586  ret i1 %c
4587}
4588
4589; x >s 23 || x >=u 17
4590
4591define i1 @or_sgt_uge_swap(i8 %x) {
4592; CHECK-LABEL: @or_sgt_uge_swap(
4593; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
4594; CHECK-NEXT:    ret i1 [[B]]
4595;
4596  %a = icmp sgt i8 %x, 23
4597  %b = icmp uge i8 %x, 17
4598  %c = or i1 %a, %b
4599  ret i1 %c
4600}
4601
4602; x >s 23 || x >u 17
4603
4604define i1 @or_sgt_ugt_swap(i8 %x) {
4605; CHECK-LABEL: @or_sgt_ugt_swap(
4606; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
4607; CHECK-NEXT:    ret i1 [[B]]
4608;
4609  %a = icmp sgt i8 %x, 23
4610  %b = icmp ugt i8 %x, 17
4611  %c = or i1 %a, %b
4612  ret i1 %c
4613}
4614
4615; x >s 23 || x <=u 17
4616
4617define i1 @or_sgt_ule_swap(i8 %x) {
4618; CHECK-LABEL: @or_sgt_ule_swap(
4619; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
4620; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
4621; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4622; CHECK-NEXT:    ret i1 [[C]]
4623;
4624  %a = icmp sgt i8 %x, 23
4625  %b = icmp ule i8 %x, 17
4626  %c = or i1 %a, %b
4627  ret i1 %c
4628}
4629
4630; x >s 23 || x <u 17
4631
4632define i1 @or_sgt_ult_swap(i8 %x) {
4633; CHECK-LABEL: @or_sgt_ult_swap(
4634; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 [[X:%.*]], 23
4635; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
4636; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4637; CHECK-NEXT:    ret i1 [[C]]
4638;
4639  %a = icmp sgt i8 %x, 23
4640  %b = icmp ult i8 %x, 17
4641  %c = or i1 %a, %b
4642  ret i1 %c
4643}
4644
4645; sle
4646; x <=s 23 || x == 17
4647
4648define i1 @or_sle_eq_swap(i8 %x) {
4649; CHECK-LABEL: @or_sle_eq_swap(
4650; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
4651; CHECK-NEXT:    ret i1 [[A]]
4652;
4653  %a = icmp sle i8 %x, 23
4654  %b = icmp eq i8 %x, 17
4655  %c = or i1 %a, %b
4656  ret i1 %c
4657}
4658
4659; x <=s 23 || x != 17
4660
4661define i1 @or_sle_ne_swap(i8 %x) {
4662; CHECK-LABEL: @or_sle_ne_swap(
4663; CHECK-NEXT:    ret i1 true
4664;
4665  %a = icmp sle i8 %x, 23
4666  %b = icmp ne i8 %x, 17
4667  %c = or i1 %a, %b
4668  ret i1 %c
4669}
4670
4671; x <=s 23 || x >=s 17
4672
4673define i1 @or_sle_sge_swap(i8 %x) {
4674; CHECK-LABEL: @or_sle_sge_swap(
4675; CHECK-NEXT:    ret i1 true
4676;
4677  %a = icmp sle i8 %x, 23
4678  %b = icmp sge i8 %x, 17
4679  %c = or i1 %a, %b
4680  ret i1 %c
4681}
4682
4683; x <=s 23 || x >s 17
4684
4685define i1 @or_sle_sgt_swap(i8 %x) {
4686; CHECK-LABEL: @or_sle_sgt_swap(
4687; CHECK-NEXT:    ret i1 true
4688;
4689  %a = icmp sle i8 %x, 23
4690  %b = icmp sgt i8 %x, 17
4691  %c = or i1 %a, %b
4692  ret i1 %c
4693}
4694
4695; x <=s 23 || x <=s 17
4696
4697define i1 @or_sle_sle_swap(i8 %x) {
4698; CHECK-LABEL: @or_sle_sle_swap(
4699; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
4700; CHECK-NEXT:    ret i1 [[A]]
4701;
4702  %a = icmp sle i8 %x, 23
4703  %b = icmp sle i8 %x, 17
4704  %c = or i1 %a, %b
4705  ret i1 %c
4706}
4707
4708; x <=s 23 || x <s 17
4709
4710define i1 @or_sle_slt_swap(i8 %x) {
4711; CHECK-LABEL: @or_sle_slt_swap(
4712; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
4713; CHECK-NEXT:    ret i1 [[A]]
4714;
4715  %a = icmp sle i8 %x, 23
4716  %b = icmp slt i8 %x, 17
4717  %c = or i1 %a, %b
4718  ret i1 %c
4719}
4720
4721; x <=s 23 || x >=u 17
4722
4723define i1 @or_sle_uge_swap(i8 %x) {
4724; CHECK-LABEL: @or_sle_uge_swap(
4725; CHECK-NEXT:    ret i1 true
4726;
4727  %a = icmp sle i8 %x, 23
4728  %b = icmp uge i8 %x, 17
4729  %c = or i1 %a, %b
4730  ret i1 %c
4731}
4732
4733; x <=s 23 || x >u 17
4734
4735define i1 @or_sle_ugt_swap(i8 %x) {
4736; CHECK-LABEL: @or_sle_ugt_swap(
4737; CHECK-NEXT:    ret i1 true
4738;
4739  %a = icmp sle i8 %x, 23
4740  %b = icmp ugt i8 %x, 17
4741  %c = or i1 %a, %b
4742  ret i1 %c
4743}
4744
4745; x <=s 23 || x <=u 17
4746
4747define i1 @or_sle_ule_swap(i8 %x) {
4748; CHECK-LABEL: @or_sle_ule_swap(
4749; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
4750; CHECK-NEXT:    ret i1 [[A]]
4751;
4752  %a = icmp sle i8 %x, 23
4753  %b = icmp ule i8 %x, 17
4754  %c = or i1 %a, %b
4755  ret i1 %c
4756}
4757
4758; x <=s 23 || x <u 17
4759
4760define i1 @or_sle_ult_swap(i8 %x) {
4761; CHECK-LABEL: @or_sle_ult_swap(
4762; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 [[X:%.*]], 23
4763; CHECK-NEXT:    ret i1 [[A]]
4764;
4765  %a = icmp sle i8 %x, 23
4766  %b = icmp ult i8 %x, 17
4767  %c = or i1 %a, %b
4768  ret i1 %c
4769}
4770
4771; slt
4772; x <s 23 || x == 17
4773
4774define i1 @or_slt_eq_swap(i8 %x) {
4775; CHECK-LABEL: @or_slt_eq_swap(
4776; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
4777; CHECK-NEXT:    ret i1 [[A]]
4778;
4779  %a = icmp slt i8 %x, 23
4780  %b = icmp eq i8 %x, 17
4781  %c = or i1 %a, %b
4782  ret i1 %c
4783}
4784
4785; x <s 23 || x != 17
4786
4787define i1 @or_slt_ne_swap(i8 %x) {
4788; CHECK-LABEL: @or_slt_ne_swap(
4789; CHECK-NEXT:    ret i1 true
4790;
4791  %a = icmp slt i8 %x, 23
4792  %b = icmp ne i8 %x, 17
4793  %c = or i1 %a, %b
4794  ret i1 %c
4795}
4796
4797; x <s 23 || x >=s 17
4798
4799define i1 @or_slt_sge_swap(i8 %x) {
4800; CHECK-LABEL: @or_slt_sge_swap(
4801; CHECK-NEXT:    ret i1 true
4802;
4803  %a = icmp slt i8 %x, 23
4804  %b = icmp sge i8 %x, 17
4805  %c = or i1 %a, %b
4806  ret i1 %c
4807}
4808
4809; x <s 23 || x >s 17
4810
4811define i1 @or_slt_sgt_swap(i8 %x) {
4812; CHECK-LABEL: @or_slt_sgt_swap(
4813; CHECK-NEXT:    ret i1 true
4814;
4815  %a = icmp slt i8 %x, 23
4816  %b = icmp sgt i8 %x, 17
4817  %c = or i1 %a, %b
4818  ret i1 %c
4819}
4820
4821; x <s 23 || x <=s 17
4822
4823define i1 @or_slt_sle_swap(i8 %x) {
4824; CHECK-LABEL: @or_slt_sle_swap(
4825; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
4826; CHECK-NEXT:    ret i1 [[A]]
4827;
4828  %a = icmp slt i8 %x, 23
4829  %b = icmp sle i8 %x, 17
4830  %c = or i1 %a, %b
4831  ret i1 %c
4832}
4833
4834; x <s 23 || x <s 17
4835
4836define i1 @or_slt_slt_swap(i8 %x) {
4837; CHECK-LABEL: @or_slt_slt_swap(
4838; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
4839; CHECK-NEXT:    ret i1 [[A]]
4840;
4841  %a = icmp slt i8 %x, 23
4842  %b = icmp slt i8 %x, 17
4843  %c = or i1 %a, %b
4844  ret i1 %c
4845}
4846
4847; x <s 23 || x >=u 17
4848
4849define i1 @or_slt_uge_swap(i8 %x) {
4850; CHECK-LABEL: @or_slt_uge_swap(
4851; CHECK-NEXT:    ret i1 true
4852;
4853  %a = icmp slt i8 %x, 23
4854  %b = icmp uge i8 %x, 17
4855  %c = or i1 %a, %b
4856  ret i1 %c
4857}
4858
4859; x <s 23 || x >u 17
4860
4861define i1 @or_slt_ugt_swap(i8 %x) {
4862; CHECK-LABEL: @or_slt_ugt_swap(
4863; CHECK-NEXT:    ret i1 true
4864;
4865  %a = icmp slt i8 %x, 23
4866  %b = icmp ugt i8 %x, 17
4867  %c = or i1 %a, %b
4868  ret i1 %c
4869}
4870
4871; x <s 23 || x <=u 17
4872
4873define i1 @or_slt_ule_swap(i8 %x) {
4874; CHECK-LABEL: @or_slt_ule_swap(
4875; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
4876; CHECK-NEXT:    ret i1 [[A]]
4877;
4878  %a = icmp slt i8 %x, 23
4879  %b = icmp ule i8 %x, 17
4880  %c = or i1 %a, %b
4881  ret i1 %c
4882}
4883
4884; x <s 23 || x <u 17
4885
4886define i1 @or_slt_ult_swap(i8 %x) {
4887; CHECK-LABEL: @or_slt_ult_swap(
4888; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 [[X:%.*]], 23
4889; CHECK-NEXT:    ret i1 [[A]]
4890;
4891  %a = icmp slt i8 %x, 23
4892  %b = icmp ult i8 %x, 17
4893  %c = or i1 %a, %b
4894  ret i1 %c
4895}
4896
4897; uge
4898; x >=u 23 || x == 17
4899
4900define i1 @or_uge_eq_swap(i8 %x) {
4901; CHECK-LABEL: @or_uge_eq_swap(
4902; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
4903; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
4904; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4905; CHECK-NEXT:    ret i1 [[C]]
4906;
4907  %a = icmp uge i8 %x, 23
4908  %b = icmp eq i8 %x, 17
4909  %c = or i1 %a, %b
4910  ret i1 %c
4911}
4912
4913; x >=u 23 || x != 17
4914
4915define i1 @or_uge_ne_swap(i8 %x) {
4916; CHECK-LABEL: @or_uge_ne_swap(
4917; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
4918; CHECK-NEXT:    ret i1 [[B]]
4919;
4920  %a = icmp uge i8 %x, 23
4921  %b = icmp ne i8 %x, 17
4922  %c = or i1 %a, %b
4923  ret i1 %c
4924}
4925
4926; x >=u 23 || x >=s 17
4927
4928define i1 @or_uge_sge_swap(i8 %x) {
4929; CHECK-LABEL: @or_uge_sge_swap(
4930; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
4931; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
4932; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4933; CHECK-NEXT:    ret i1 [[C]]
4934;
4935  %a = icmp uge i8 %x, 23
4936  %b = icmp sge i8 %x, 17
4937  %c = or i1 %a, %b
4938  ret i1 %c
4939}
4940
4941; x >=u 23 || x >s 17
4942
4943define i1 @or_uge_sgt_swap(i8 %x) {
4944; CHECK-LABEL: @or_uge_sgt_swap(
4945; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
4946; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
4947; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4948; CHECK-NEXT:    ret i1 [[C]]
4949;
4950  %a = icmp uge i8 %x, 23
4951  %b = icmp sgt i8 %x, 17
4952  %c = or i1 %a, %b
4953  ret i1 %c
4954}
4955
4956; x >=u 23 || x <=s 17
4957
4958define i1 @or_uge_sle_swap(i8 %x) {
4959; CHECK-LABEL: @or_uge_sle_swap(
4960; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
4961; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
4962; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4963; CHECK-NEXT:    ret i1 [[C]]
4964;
4965  %a = icmp uge i8 %x, 23
4966  %b = icmp sle i8 %x, 17
4967  %c = or i1 %a, %b
4968  ret i1 %c
4969}
4970
4971; x >=u 23 || x <s 17
4972
4973define i1 @or_uge_slt_swap(i8 %x) {
4974; CHECK-LABEL: @or_uge_slt_swap(
4975; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
4976; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
4977; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4978; CHECK-NEXT:    ret i1 [[C]]
4979;
4980  %a = icmp uge i8 %x, 23
4981  %b = icmp slt i8 %x, 17
4982  %c = or i1 %a, %b
4983  ret i1 %c
4984}
4985
4986; x >=u 23 || x >=u 17
4987
4988define i1 @or_uge_uge_swap(i8 %x) {
4989; CHECK-LABEL: @or_uge_uge_swap(
4990; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
4991; CHECK-NEXT:    ret i1 [[B]]
4992;
4993  %a = icmp uge i8 %x, 23
4994  %b = icmp uge i8 %x, 17
4995  %c = or i1 %a, %b
4996  ret i1 %c
4997}
4998
4999; x >=u 23 || x >u 17
5000
5001define i1 @or_uge_ugt_swap(i8 %x) {
5002; CHECK-LABEL: @or_uge_ugt_swap(
5003; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
5004; CHECK-NEXT:    ret i1 [[B]]
5005;
5006  %a = icmp uge i8 %x, 23
5007  %b = icmp ugt i8 %x, 17
5008  %c = or i1 %a, %b
5009  ret i1 %c
5010}
5011
5012; x >=u 23 || x <=u 17
5013
5014define i1 @or_uge_ule_swap(i8 %x) {
5015; CHECK-LABEL: @or_uge_ule_swap(
5016; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
5017; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
5018; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5019; CHECK-NEXT:    ret i1 [[C]]
5020;
5021  %a = icmp uge i8 %x, 23
5022  %b = icmp ule i8 %x, 17
5023  %c = or i1 %a, %b
5024  ret i1 %c
5025}
5026
5027; x >=u 23 || x <u 17
5028
5029define i1 @or_uge_ult_swap(i8 %x) {
5030; CHECK-LABEL: @or_uge_ult_swap(
5031; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 [[X:%.*]], 23
5032; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
5033; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5034; CHECK-NEXT:    ret i1 [[C]]
5035;
5036  %a = icmp uge i8 %x, 23
5037  %b = icmp ult i8 %x, 17
5038  %c = or i1 %a, %b
5039  ret i1 %c
5040}
5041
5042; ugt
5043; x >u 23 || x == 17
5044
5045define i1 @or_ugt_eq_swap(i8 %x) {
5046; CHECK-LABEL: @or_ugt_eq_swap(
5047; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5048; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 [[X]], 17
5049; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5050; CHECK-NEXT:    ret i1 [[C]]
5051;
5052  %a = icmp ugt i8 %x, 23
5053  %b = icmp eq i8 %x, 17
5054  %c = or i1 %a, %b
5055  ret i1 %c
5056}
5057
5058; x >u 23 || x != 17
5059
5060define i1 @or_ugt_ne_swap(i8 %x) {
5061; CHECK-LABEL: @or_ugt_ne_swap(
5062; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 [[X:%.*]], 17
5063; CHECK-NEXT:    ret i1 [[B]]
5064;
5065  %a = icmp ugt i8 %x, 23
5066  %b = icmp ne i8 %x, 17
5067  %c = or i1 %a, %b
5068  ret i1 %c
5069}
5070
5071; x >u 23 || x >=s 17
5072
5073define i1 @or_ugt_sge_swap(i8 %x) {
5074; CHECK-LABEL: @or_ugt_sge_swap(
5075; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5076; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
5077; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5078; CHECK-NEXT:    ret i1 [[C]]
5079;
5080  %a = icmp ugt i8 %x, 23
5081  %b = icmp sge i8 %x, 17
5082  %c = or i1 %a, %b
5083  ret i1 %c
5084}
5085
5086; x >u 23 || x >s 17
5087
5088define i1 @or_ugt_sgt_swap(i8 %x) {
5089; CHECK-LABEL: @or_ugt_sgt_swap(
5090; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5091; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
5092; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5093; CHECK-NEXT:    ret i1 [[C]]
5094;
5095  %a = icmp ugt i8 %x, 23
5096  %b = icmp sgt i8 %x, 17
5097  %c = or i1 %a, %b
5098  ret i1 %c
5099}
5100
5101; x >u 23 || x <=s 17
5102
5103define i1 @or_ugt_sle_swap(i8 %x) {
5104; CHECK-LABEL: @or_ugt_sle_swap(
5105; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5106; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
5107; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5108; CHECK-NEXT:    ret i1 [[C]]
5109;
5110  %a = icmp ugt i8 %x, 23
5111  %b = icmp sle i8 %x, 17
5112  %c = or i1 %a, %b
5113  ret i1 %c
5114}
5115
5116; x >u 23 || x <s 17
5117
5118define i1 @or_ugt_slt_swap(i8 %x) {
5119; CHECK-LABEL: @or_ugt_slt_swap(
5120; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5121; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
5122; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5123; CHECK-NEXT:    ret i1 [[C]]
5124;
5125  %a = icmp ugt i8 %x, 23
5126  %b = icmp slt i8 %x, 17
5127  %c = or i1 %a, %b
5128  ret i1 %c
5129}
5130
5131; x >u 23 || x >=u 17
5132
5133define i1 @or_ugt_uge_swap(i8 %x) {
5134; CHECK-LABEL: @or_ugt_uge_swap(
5135; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 [[X:%.*]], 17
5136; CHECK-NEXT:    ret i1 [[B]]
5137;
5138  %a = icmp ugt i8 %x, 23
5139  %b = icmp uge i8 %x, 17
5140  %c = or i1 %a, %b
5141  ret i1 %c
5142}
5143
5144; x >u 23 || x >u 17
5145
5146define i1 @or_ugt_ugt_swap(i8 %x) {
5147; CHECK-LABEL: @or_ugt_ugt_swap(
5148; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 [[X:%.*]], 17
5149; CHECK-NEXT:    ret i1 [[B]]
5150;
5151  %a = icmp ugt i8 %x, 23
5152  %b = icmp ugt i8 %x, 17
5153  %c = or i1 %a, %b
5154  ret i1 %c
5155}
5156
5157; x >u 23 || x <=u 17
5158
5159define i1 @or_ugt_ule_swap(i8 %x) {
5160; CHECK-LABEL: @or_ugt_ule_swap(
5161; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5162; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 [[X]], 17
5163; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5164; CHECK-NEXT:    ret i1 [[C]]
5165;
5166  %a = icmp ugt i8 %x, 23
5167  %b = icmp ule i8 %x, 17
5168  %c = or i1 %a, %b
5169  ret i1 %c
5170}
5171
5172; x >u 23 || x <u 17
5173
5174define i1 @or_ugt_ult_swap(i8 %x) {
5175; CHECK-LABEL: @or_ugt_ult_swap(
5176; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 [[X:%.*]], 23
5177; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 [[X]], 17
5178; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5179; CHECK-NEXT:    ret i1 [[C]]
5180;
5181  %a = icmp ugt i8 %x, 23
5182  %b = icmp ult i8 %x, 17
5183  %c = or i1 %a, %b
5184  ret i1 %c
5185}
5186
5187; ule
5188; x <=u 23 || x == 17
5189
5190define i1 @or_ule_eq_swap(i8 %x) {
5191; CHECK-LABEL: @or_ule_eq_swap(
5192; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5193; CHECK-NEXT:    ret i1 [[A]]
5194;
5195  %a = icmp ule i8 %x, 23
5196  %b = icmp eq i8 %x, 17
5197  %c = or i1 %a, %b
5198  ret i1 %c
5199}
5200
5201; x <=u 23 || x != 17
5202
5203define i1 @or_ule_ne_swap(i8 %x) {
5204; CHECK-LABEL: @or_ule_ne_swap(
5205; CHECK-NEXT:    ret i1 true
5206;
5207  %a = icmp ule i8 %x, 23
5208  %b = icmp ne i8 %x, 17
5209  %c = or i1 %a, %b
5210  ret i1 %c
5211}
5212
5213; x <=u 23 || x >=s 17
5214
5215define i1 @or_ule_sge_swap(i8 %x) {
5216; CHECK-LABEL: @or_ule_sge_swap(
5217; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5218; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
5219; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5220; CHECK-NEXT:    ret i1 [[C]]
5221;
5222  %a = icmp ule i8 %x, 23
5223  %b = icmp sge i8 %x, 17
5224  %c = or i1 %a, %b
5225  ret i1 %c
5226}
5227
5228; x <=u 23 || x >s 17
5229
5230define i1 @or_ule_sgt_swap(i8 %x) {
5231; CHECK-LABEL: @or_ule_sgt_swap(
5232; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5233; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
5234; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5235; CHECK-NEXT:    ret i1 [[C]]
5236;
5237  %a = icmp ule i8 %x, 23
5238  %b = icmp sgt i8 %x, 17
5239  %c = or i1 %a, %b
5240  ret i1 %c
5241}
5242
5243; x <=u 23 || x <=s 17
5244
5245define i1 @or_ule_sle_swap(i8 %x) {
5246; CHECK-LABEL: @or_ule_sle_swap(
5247; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5248; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
5249; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5250; CHECK-NEXT:    ret i1 [[C]]
5251;
5252  %a = icmp ule i8 %x, 23
5253  %b = icmp sle i8 %x, 17
5254  %c = or i1 %a, %b
5255  ret i1 %c
5256}
5257
5258; x <=u 23 || x <s 17
5259
5260define i1 @or_ule_slt_swap(i8 %x) {
5261; CHECK-LABEL: @or_ule_slt_swap(
5262; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5263; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
5264; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5265; CHECK-NEXT:    ret i1 [[C]]
5266;
5267  %a = icmp ule i8 %x, 23
5268  %b = icmp slt i8 %x, 17
5269  %c = or i1 %a, %b
5270  ret i1 %c
5271}
5272
5273; x <=u 23 || x >=u 17
5274
5275define i1 @or_ule_uge_swap(i8 %x) {
5276; CHECK-LABEL: @or_ule_uge_swap(
5277; CHECK-NEXT:    ret i1 true
5278;
5279  %a = icmp ule i8 %x, 23
5280  %b = icmp uge i8 %x, 17
5281  %c = or i1 %a, %b
5282  ret i1 %c
5283}
5284
5285; x <=u 23 || x >u 17
5286
5287define i1 @or_ule_ugt_swap(i8 %x) {
5288; CHECK-LABEL: @or_ule_ugt_swap(
5289; CHECK-NEXT:    ret i1 true
5290;
5291  %a = icmp ule i8 %x, 23
5292  %b = icmp ugt i8 %x, 17
5293  %c = or i1 %a, %b
5294  ret i1 %c
5295}
5296
5297; x <=u 23 || x <=u 17
5298
5299define i1 @or_ule_ule_swap(i8 %x) {
5300; CHECK-LABEL: @or_ule_ule_swap(
5301; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5302; CHECK-NEXT:    ret i1 [[A]]
5303;
5304  %a = icmp ule i8 %x, 23
5305  %b = icmp ule i8 %x, 17
5306  %c = or i1 %a, %b
5307  ret i1 %c
5308}
5309
5310; x <=u 23 || x <u 17
5311
5312define i1 @or_ule_ult_swap(i8 %x) {
5313; CHECK-LABEL: @or_ule_ult_swap(
5314; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 [[X:%.*]], 23
5315; CHECK-NEXT:    ret i1 [[A]]
5316;
5317  %a = icmp ule i8 %x, 23
5318  %b = icmp ult i8 %x, 17
5319  %c = or i1 %a, %b
5320  ret i1 %c
5321}
5322
5323; ult
5324; x <u 23 || x == 17
5325
5326define i1 @or_ult_eq_swap(i8 %x) {
5327; CHECK-LABEL: @or_ult_eq_swap(
5328; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5329; CHECK-NEXT:    ret i1 [[A]]
5330;
5331  %a = icmp ult i8 %x, 23
5332  %b = icmp eq i8 %x, 17
5333  %c = or i1 %a, %b
5334  ret i1 %c
5335}
5336
5337; x <u 23 || x != 17
5338
5339define i1 @or_ult_ne_swap(i8 %x) {
5340; CHECK-LABEL: @or_ult_ne_swap(
5341; CHECK-NEXT:    ret i1 true
5342;
5343  %a = icmp ult i8 %x, 23
5344  %b = icmp ne i8 %x, 17
5345  %c = or i1 %a, %b
5346  ret i1 %c
5347}
5348
5349; x <u 23 || x >=s 17
5350
5351define i1 @or_ult_sge_swap(i8 %x) {
5352; CHECK-LABEL: @or_ult_sge_swap(
5353; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5354; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 [[X]], 17
5355; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5356; CHECK-NEXT:    ret i1 [[C]]
5357;
5358  %a = icmp ult i8 %x, 23
5359  %b = icmp sge i8 %x, 17
5360  %c = or i1 %a, %b
5361  ret i1 %c
5362}
5363
5364; x <u 23 || x >s 17
5365
5366define i1 @or_ult_sgt_swap(i8 %x) {
5367; CHECK-LABEL: @or_ult_sgt_swap(
5368; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5369; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 [[X]], 17
5370; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5371; CHECK-NEXT:    ret i1 [[C]]
5372;
5373  %a = icmp ult i8 %x, 23
5374  %b = icmp sgt i8 %x, 17
5375  %c = or i1 %a, %b
5376  ret i1 %c
5377}
5378
5379; x <u 23 || x <=s 17
5380
5381define i1 @or_ult_sle_swap(i8 %x) {
5382; CHECK-LABEL: @or_ult_sle_swap(
5383; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5384; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 [[X]], 17
5385; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5386; CHECK-NEXT:    ret i1 [[C]]
5387;
5388  %a = icmp ult i8 %x, 23
5389  %b = icmp sle i8 %x, 17
5390  %c = or i1 %a, %b
5391  ret i1 %c
5392}
5393
5394; x <u 23 || x <s 17
5395
5396define i1 @or_ult_slt_swap(i8 %x) {
5397; CHECK-LABEL: @or_ult_slt_swap(
5398; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5399; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 [[X]], 17
5400; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5401; CHECK-NEXT:    ret i1 [[C]]
5402;
5403  %a = icmp ult i8 %x, 23
5404  %b = icmp slt i8 %x, 17
5405  %c = or i1 %a, %b
5406  ret i1 %c
5407}
5408
5409; x <u 23 || x >=u 17
5410
5411define i1 @or_ult_uge_swap(i8 %x) {
5412; CHECK-LABEL: @or_ult_uge_swap(
5413; CHECK-NEXT:    ret i1 true
5414;
5415  %a = icmp ult i8 %x, 23
5416  %b = icmp uge i8 %x, 17
5417  %c = or i1 %a, %b
5418  ret i1 %c
5419}
5420
5421; x <u 23 || x >u 17
5422
5423define i1 @or_ult_ugt_swap(i8 %x) {
5424; CHECK-LABEL: @or_ult_ugt_swap(
5425; CHECK-NEXT:    ret i1 true
5426;
5427  %a = icmp ult i8 %x, 23
5428  %b = icmp ugt i8 %x, 17
5429  %c = or i1 %a, %b
5430  ret i1 %c
5431}
5432
5433; x <u 23 || x <=u 17
5434
5435define i1 @or_ult_ule_swap(i8 %x) {
5436; CHECK-LABEL: @or_ult_ule_swap(
5437; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5438; CHECK-NEXT:    ret i1 [[A]]
5439;
5440  %a = icmp ult i8 %x, 23
5441  %b = icmp ule i8 %x, 17
5442  %c = or i1 %a, %b
5443  ret i1 %c
5444}
5445
5446; x <u 23 || x <u 17
5447
5448define i1 @or_ult_ult_swap(i8 %x) {
5449; CHECK-LABEL: @or_ult_ult_swap(
5450; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 [[X:%.*]], 23
5451; CHECK-NEXT:    ret i1 [[A]]
5452;
5453  %a = icmp ult i8 %x, 23
5454  %b = icmp ult i8 %x, 17
5455  %c = or i1 %a, %b
5456  ret i1 %c
5457}
5458
5459; Special case - slt is uge
5460; x <u 31 && x <s 0
5461
5462define i1 @empty2(i32 %x) {
5463; CHECK-LABEL: @empty2(
5464; CHECK-NEXT:    ret i1 false
5465;
5466  %a = icmp ult i32 %x, 31
5467  %b = icmp slt i32 %x, 0
5468  %c = and i1 %a, %b
5469  ret i1 %c
5470}
5471
5472