[MIParser] Set RegClassOrRegBank during instruction parsing
[llvm-complete.git] / test / Transforms / InstSimplify / icmp-ranges.ll
blob45194f2df4f14f42e88def83cc0473b2e42afbea
1 ; RUN: opt < %s -instsimplify -S | FileCheck %s
3 ; Cycle through all pairs of predicates to test
4 ; simplification of range-intersection or range-union.
6 ; eq
7 ; x == 13 && x == 17
9 define i1 @and_eq_eq(i8 %x) {
10 ; CHECK-LABEL: @and_eq_eq(
11 ; CHECK-NEXT:    ret i1 false
13   %a = icmp eq i8 %x, 13
14   %b = icmp eq i8 %x, 17
15   %c = and i1 %a, %b
16   ret i1 %c
19 ; x == 13 && x != 17
21 define i1 @and_eq_ne(i8 %x) {
22 ; CHECK-LABEL: @and_eq_ne(
23 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
24 ; CHECK-NEXT:    ret i1 [[A]]
26   %a = icmp eq i8 %x, 13
27   %b = icmp ne i8 %x, 17
28   %c = and i1 %a, %b
29   ret i1 %c
32 ; x == 13 && x >=s 17
34 define i1 @and_eq_sge(i8 %x) {
35 ; CHECK-LABEL: @and_eq_sge(
36 ; CHECK-NEXT:    ret i1 false
38   %a = icmp eq i8 %x, 13
39   %b = icmp sge i8 %x, 17
40   %c = and i1 %a, %b
41   ret i1 %c
44 ; x == 13 && x >s 17
46 define i1 @and_eq_sgt(i8 %x) {
47 ; CHECK-LABEL: @and_eq_sgt(
48 ; CHECK-NEXT:    ret i1 false
50   %a = icmp eq i8 %x, 13
51   %b = icmp sgt i8 %x, 17
52   %c = and i1 %a, %b
53   ret i1 %c
56 ; x == 13 && x <=s 17
58 define i1 @and_eq_sle(i8 %x) {
59 ; CHECK-LABEL: @and_eq_sle(
60 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
61 ; CHECK-NEXT:    ret i1 [[A]]
63   %a = icmp eq i8 %x, 13
64   %b = icmp sle i8 %x, 17
65   %c = and i1 %a, %b
66   ret i1 %c
69 ; x == 13 && x <s 17
71 define i1 @and_eq_slt(i8 %x) {
72 ; CHECK-LABEL: @and_eq_slt(
73 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
74 ; CHECK-NEXT:    ret i1 [[A]]
76   %a = icmp eq i8 %x, 13
77   %b = icmp slt i8 %x, 17
78   %c = and i1 %a, %b
79   ret i1 %c
82 ; x == 13 && x >=u 17
84 define i1 @and_eq_uge(i8 %x) {
85 ; CHECK-LABEL: @and_eq_uge(
86 ; CHECK-NEXT:    ret i1 false
88   %a = icmp eq i8 %x, 13
89   %b = icmp uge i8 %x, 17
90   %c = and i1 %a, %b
91   ret i1 %c
94 ; x == 13 && x >u 17
96 define i1 @and_eq_ugt(i8 %x) {
97 ; CHECK-LABEL: @and_eq_ugt(
98 ; CHECK-NEXT:    ret i1 false
100   %a = icmp eq i8 %x, 13
101   %b = icmp ugt i8 %x, 17
102   %c = and i1 %a, %b
103   ret i1 %c
106 ; x == 13 && x <=u 17
108 define i1 @and_eq_ule(i8 %x) {
109 ; CHECK-LABEL: @and_eq_ule(
110 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
111 ; CHECK-NEXT:    ret i1 [[A]]
113   %a = icmp eq i8 %x, 13
114   %b = icmp ule i8 %x, 17
115   %c = and i1 %a, %b
116   ret i1 %c
119 ; x == 13 && x <u 17
121 define i1 @and_eq_ult(i8 %x) {
122 ; CHECK-LABEL: @and_eq_ult(
123 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
124 ; CHECK-NEXT:    ret i1 [[A]]
126   %a = icmp eq i8 %x, 13
127   %b = icmp ult i8 %x, 17
128   %c = and i1 %a, %b
129   ret i1 %c
132 ; ne
133 ; x != 13 && x == 17
135 define i1 @and_ne_eq(i8 %x) {
136 ; CHECK-LABEL: @and_ne_eq(
137 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
138 ; CHECK-NEXT:    ret i1 [[B]]
140   %a = icmp ne i8 %x, 13
141   %b = icmp eq i8 %x, 17
142   %c = and i1 %a, %b
143   ret i1 %c
146 ; x != 13 && x != 17
148 define i1 @and_ne_ne(i8 %x) {
149 ; CHECK-LABEL: @and_ne_ne(
150 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
151 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
152 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
153 ; CHECK-NEXT:    ret i1 [[C]]
155   %a = icmp ne i8 %x, 13
156   %b = icmp ne i8 %x, 17
157   %c = and i1 %a, %b
158   ret i1 %c
161 ; x != 13 && x >=s 17
163 define i1 @and_ne_sge(i8 %x) {
164 ; CHECK-LABEL: @and_ne_sge(
165 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
166 ; CHECK-NEXT:    ret i1 [[B]]
168   %a = icmp ne i8 %x, 13
169   %b = icmp sge i8 %x, 17
170   %c = and i1 %a, %b
171   ret i1 %c
174 ; x != 13 && x >s 17
176 define i1 @and_ne_sgt(i8 %x) {
177 ; CHECK-LABEL: @and_ne_sgt(
178 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
179 ; CHECK-NEXT:    ret i1 [[B]]
181   %a = icmp ne i8 %x, 13
182   %b = icmp sgt i8 %x, 17
183   %c = and i1 %a, %b
184   ret i1 %c
187 ; x != 13 && x <=s 17
189 define i1 @and_ne_sle(i8 %x) {
190 ; CHECK-LABEL: @and_ne_sle(
191 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
192 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
193 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
194 ; CHECK-NEXT:    ret i1 [[C]]
196   %a = icmp ne i8 %x, 13
197   %b = icmp sle i8 %x, 17
198   %c = and i1 %a, %b
199   ret i1 %c
202 ; x != 13 && x <s 17
204 define i1 @and_ne_slt(i8 %x) {
205 ; CHECK-LABEL: @and_ne_slt(
206 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
207 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
208 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
209 ; CHECK-NEXT:    ret i1 [[C]]
211   %a = icmp ne i8 %x, 13
212   %b = icmp slt i8 %x, 17
213   %c = and i1 %a, %b
214   ret i1 %c
217 ; x != 13 && x >=u 17
219 define i1 @and_ne_uge(i8 %x) {
220 ; CHECK-LABEL: @and_ne_uge(
221 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
222 ; CHECK-NEXT:    ret i1 [[B]]
224   %a = icmp ne i8 %x, 13
225   %b = icmp uge i8 %x, 17
226   %c = and i1 %a, %b
227   ret i1 %c
230 ; x != 13 && x >u 17
232 define i1 @and_ne_ugt(i8 %x) {
233 ; CHECK-LABEL: @and_ne_ugt(
234 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
235 ; CHECK-NEXT:    ret i1 [[B]]
237   %a = icmp ne i8 %x, 13
238   %b = icmp ugt i8 %x, 17
239   %c = and i1 %a, %b
240   ret i1 %c
243 ; x != 13 && x <=u 17
245 define i1 @and_ne_ule(i8 %x) {
246 ; CHECK-LABEL: @and_ne_ule(
247 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
248 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
249 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
250 ; CHECK-NEXT:    ret i1 [[C]]
252   %a = icmp ne i8 %x, 13
253   %b = icmp ule i8 %x, 17
254   %c = and i1 %a, %b
255   ret i1 %c
258 ; x != 13 && x <u 17
260 define i1 @and_ne_ult(i8 %x) {
261 ; CHECK-LABEL: @and_ne_ult(
262 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
263 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
264 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
265 ; CHECK-NEXT:    ret i1 [[C]]
267   %a = icmp ne i8 %x, 13
268   %b = icmp ult i8 %x, 17
269   %c = and i1 %a, %b
270   ret i1 %c
273 ; sge
274 ; x >=s 13 && x == 17
276 define i1 @and_sge_eq(i8 %x) {
277 ; CHECK-LABEL: @and_sge_eq(
278 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
279 ; CHECK-NEXT:    ret i1 [[B]]
281   %a = icmp sge i8 %x, 13
282   %b = icmp eq i8 %x, 17
283   %c = and i1 %a, %b
284   ret i1 %c
287 ; x >=s 13 && x != 17
289 define i1 @and_sge_ne(i8 %x) {
290 ; CHECK-LABEL: @and_sge_ne(
291 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
292 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
293 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
294 ; CHECK-NEXT:    ret i1 [[C]]
296   %a = icmp sge i8 %x, 13
297   %b = icmp ne i8 %x, 17
298   %c = and i1 %a, %b
299   ret i1 %c
302 ; x >=s 13 && x >=s 17
304 define i1 @and_sge_sge(i8 %x) {
305 ; CHECK-LABEL: @and_sge_sge(
306 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
307 ; CHECK-NEXT:    ret i1 [[B]]
309   %a = icmp sge i8 %x, 13
310   %b = icmp sge i8 %x, 17
311   %c = and i1 %a, %b
312   ret i1 %c
315 ; x >=s 13 && x >s 17
317 define i1 @and_sge_sgt(i8 %x) {
318 ; CHECK-LABEL: @and_sge_sgt(
319 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
320 ; CHECK-NEXT:    ret i1 [[B]]
322   %a = icmp sge i8 %x, 13
323   %b = icmp sgt i8 %x, 17
324   %c = and i1 %a, %b
325   ret i1 %c
328 ; x >=s 13 && x <=s 17
330 define i1 @and_sge_sle(i8 %x) {
331 ; CHECK-LABEL: @and_sge_sle(
332 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
333 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
334 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
335 ; CHECK-NEXT:    ret i1 [[C]]
337   %a = icmp sge i8 %x, 13
338   %b = icmp sle i8 %x, 17
339   %c = and i1 %a, %b
340   ret i1 %c
343 ; x >=s 13 && x <s 17
345 define i1 @and_sge_slt(i8 %x) {
346 ; CHECK-LABEL: @and_sge_slt(
347 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
348 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
349 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
350 ; CHECK-NEXT:    ret i1 [[C]]
352   %a = icmp sge i8 %x, 13
353   %b = icmp slt i8 %x, 17
354   %c = and i1 %a, %b
355   ret i1 %c
358 ; x >=s 13 && x >=u 17
360 define i1 @and_sge_uge(i8 %x) {
361 ; CHECK-LABEL: @and_sge_uge(
362 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
363 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
364 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
365 ; CHECK-NEXT:    ret i1 [[C]]
367   %a = icmp sge i8 %x, 13
368   %b = icmp uge i8 %x, 17
369   %c = and i1 %a, %b
370   ret i1 %c
373 ; x >=s 13 && x >u 17
375 define i1 @and_sge_ugt(i8 %x) {
376 ; CHECK-LABEL: @and_sge_ugt(
377 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
378 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
379 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
380 ; CHECK-NEXT:    ret i1 [[C]]
382   %a = icmp sge i8 %x, 13
383   %b = icmp ugt i8 %x, 17
384   %c = and i1 %a, %b
385   ret i1 %c
388 ; x >=s 13 && x <=u 17
390 define i1 @and_sge_ule(i8 %x) {
391 ; CHECK-LABEL: @and_sge_ule(
392 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
393 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
394 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
395 ; CHECK-NEXT:    ret i1 [[C]]
397   %a = icmp sge i8 %x, 13
398   %b = icmp ule i8 %x, 17
399   %c = and i1 %a, %b
400   ret i1 %c
403 ; x >=s 13 && x <u 17
405 define i1 @and_sge_ult(i8 %x) {
406 ; CHECK-LABEL: @and_sge_ult(
407 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
408 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
409 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
410 ; CHECK-NEXT:    ret i1 [[C]]
412   %a = icmp sge i8 %x, 13
413   %b = icmp ult i8 %x, 17
414   %c = and i1 %a, %b
415   ret i1 %c
418 ; sgt
419 ; x >s 13 && x == 17
421 define i1 @and_sgt_eq(i8 %x) {
422 ; CHECK-LABEL: @and_sgt_eq(
423 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
424 ; CHECK-NEXT:    ret i1 [[B]]
426   %a = icmp sgt i8 %x, 13
427   %b = icmp eq i8 %x, 17
428   %c = and i1 %a, %b
429   ret i1 %c
432 ; x >s 13 && x != 17
434 define i1 @and_sgt_ne(i8 %x) {
435 ; CHECK-LABEL: @and_sgt_ne(
436 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
437 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
438 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
439 ; CHECK-NEXT:    ret i1 [[C]]
441   %a = icmp sgt i8 %x, 13
442   %b = icmp ne i8 %x, 17
443   %c = and i1 %a, %b
444   ret i1 %c
447 ; x >s 13 && x >=s 17
449 define i1 @and_sgt_sge(i8 %x) {
450 ; CHECK-LABEL: @and_sgt_sge(
451 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
452 ; CHECK-NEXT:    ret i1 [[B]]
454   %a = icmp sgt i8 %x, 13
455   %b = icmp sge i8 %x, 17
456   %c = and i1 %a, %b
457   ret i1 %c
460 ; x >s 13 && x >s 17
462 define i1 @and_sgt_sgt(i8 %x) {
463 ; CHECK-LABEL: @and_sgt_sgt(
464 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
465 ; CHECK-NEXT:    ret i1 [[B]]
467   %a = icmp sgt i8 %x, 13
468   %b = icmp sgt i8 %x, 17
469   %c = and i1 %a, %b
470   ret i1 %c
473 ; x >s 13 && x <=s 17
475 define i1 @and_sgt_sle(i8 %x) {
476 ; CHECK-LABEL: @and_sgt_sle(
477 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
478 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
479 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
480 ; CHECK-NEXT:    ret i1 [[C]]
482   %a = icmp sgt i8 %x, 13
483   %b = icmp sle i8 %x, 17
484   %c = and i1 %a, %b
485   ret i1 %c
488 ; x >s 13 && x <s 17
490 define i1 @and_sgt_slt(i8 %x) {
491 ; CHECK-LABEL: @and_sgt_slt(
492 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
493 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
494 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
495 ; CHECK-NEXT:    ret i1 [[C]]
497   %a = icmp sgt i8 %x, 13
498   %b = icmp slt i8 %x, 17
499   %c = and i1 %a, %b
500   ret i1 %c
503 ; x >s 13 && x >=u 17
505 define i1 @and_sgt_uge(i8 %x) {
506 ; CHECK-LABEL: @and_sgt_uge(
507 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
508 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
509 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
510 ; CHECK-NEXT:    ret i1 [[C]]
512   %a = icmp sgt i8 %x, 13
513   %b = icmp uge i8 %x, 17
514   %c = and i1 %a, %b
515   ret i1 %c
518 ; x >s 13 && x >u 17
520 define i1 @and_sgt_ugt(i8 %x) {
521 ; CHECK-LABEL: @and_sgt_ugt(
522 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
523 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
524 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
525 ; CHECK-NEXT:    ret i1 [[C]]
527   %a = icmp sgt i8 %x, 13
528   %b = icmp ugt i8 %x, 17
529   %c = and i1 %a, %b
530   ret i1 %c
533 ; x >s 13 && x <=u 17
535 define i1 @and_sgt_ule(i8 %x) {
536 ; CHECK-LABEL: @and_sgt_ule(
537 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
538 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
539 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
540 ; CHECK-NEXT:    ret i1 [[C]]
542   %a = icmp sgt i8 %x, 13
543   %b = icmp ule i8 %x, 17
544   %c = and i1 %a, %b
545   ret i1 %c
548 ; x >s 13 && x <u 17
550 define i1 @and_sgt_ult(i8 %x) {
551 ; CHECK-LABEL: @and_sgt_ult(
552 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
553 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
554 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
555 ; CHECK-NEXT:    ret i1 [[C]]
557   %a = icmp sgt i8 %x, 13
558   %b = icmp ult i8 %x, 17
559   %c = and i1 %a, %b
560   ret i1 %c
563 ; sle
564 ; x <=s 13 && x == 17
566 define i1 @and_sle_eq(i8 %x) {
567 ; CHECK-LABEL: @and_sle_eq(
568 ; CHECK-NEXT:    ret i1 false
570   %a = icmp sle i8 %x, 13
571   %b = icmp eq i8 %x, 17
572   %c = and i1 %a, %b
573   ret i1 %c
576 ; x <=s 13 && x != 17
578 define i1 @and_sle_ne(i8 %x) {
579 ; CHECK-LABEL: @and_sle_ne(
580 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
581 ; CHECK-NEXT:    ret i1 [[A]]
583   %a = icmp sle i8 %x, 13
584   %b = icmp ne i8 %x, 17
585   %c = and i1 %a, %b
586   ret i1 %c
589 ; x <=s 13 && x >=s 17
591 define i1 @and_sle_sge(i8 %x) {
592 ; CHECK-LABEL: @and_sle_sge(
593 ; CHECK-NEXT:    ret i1 false
595   %a = icmp sle i8 %x, 13
596   %b = icmp sge i8 %x, 17
597   %c = and i1 %a, %b
598   ret i1 %c
601 ; x <=s 13 && x >s 17
603 define i1 @and_sle_sgt(i8 %x) {
604 ; CHECK-LABEL: @and_sle_sgt(
605 ; CHECK-NEXT:    ret i1 false
607   %a = icmp sle i8 %x, 13
608   %b = icmp sgt i8 %x, 17
609   %c = and i1 %a, %b
610   ret i1 %c
613 ; x <=s 13 && x <=s 17
615 define i1 @and_sle_sle(i8 %x) {
616 ; CHECK-LABEL: @and_sle_sle(
617 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
618 ; CHECK-NEXT:    ret i1 [[A]]
620   %a = icmp sle i8 %x, 13
621   %b = icmp sle i8 %x, 17
622   %c = and i1 %a, %b
623   ret i1 %c
626 ; x <=s 13 && x <s 17
628 define i1 @and_sle_slt(i8 %x) {
629 ; CHECK-LABEL: @and_sle_slt(
630 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
631 ; CHECK-NEXT:    ret i1 [[A]]
633   %a = icmp sle i8 %x, 13
634   %b = icmp slt i8 %x, 17
635   %c = and i1 %a, %b
636   ret i1 %c
639 ; x <=s 13 && x >=u 17
641 define i1 @and_sle_uge(i8 %x) {
642 ; CHECK-LABEL: @and_sle_uge(
643 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
644 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
645 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
646 ; CHECK-NEXT:    ret i1 [[C]]
648   %a = icmp sle i8 %x, 13
649   %b = icmp uge i8 %x, 17
650   %c = and i1 %a, %b
651   ret i1 %c
654 ; x <=s 13 && x >u 17
656 define i1 @and_sle_ugt(i8 %x) {
657 ; CHECK-LABEL: @and_sle_ugt(
658 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
659 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
660 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
661 ; CHECK-NEXT:    ret i1 [[C]]
663   %a = icmp sle i8 %x, 13
664   %b = icmp ugt i8 %x, 17
665   %c = and i1 %a, %b
666   ret i1 %c
669 ; x <=s 13 && x <=u 17
671 define i1 @and_sle_ule(i8 %x) {
672 ; CHECK-LABEL: @and_sle_ule(
673 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
674 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
675 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
676 ; CHECK-NEXT:    ret i1 [[C]]
678   %a = icmp sle i8 %x, 13
679   %b = icmp ule i8 %x, 17
680   %c = and i1 %a, %b
681   ret i1 %c
684 ; x <=s 13 && x <u 17
686 define i1 @and_sle_ult(i8 %x) {
687 ; CHECK-LABEL: @and_sle_ult(
688 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
689 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
690 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
691 ; CHECK-NEXT:    ret i1 [[C]]
693   %a = icmp sle i8 %x, 13
694   %b = icmp ult i8 %x, 17
695   %c = and i1 %a, %b
696   ret i1 %c
699 ; slt
700 ; x <s 13 && x == 17
702 define i1 @and_slt_eq(i8 %x) {
703 ; CHECK-LABEL: @and_slt_eq(
704 ; CHECK-NEXT:    ret i1 false
706   %a = icmp slt i8 %x, 13
707   %b = icmp eq i8 %x, 17
708   %c = and i1 %a, %b
709   ret i1 %c
712 ; x <s 13 && x != 17
714 define i1 @and_slt_ne(i8 %x) {
715 ; CHECK-LABEL: @and_slt_ne(
716 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
717 ; CHECK-NEXT:    ret i1 [[A]]
719   %a = icmp slt i8 %x, 13
720   %b = icmp ne i8 %x, 17
721   %c = and i1 %a, %b
722   ret i1 %c
725 ; x <s 13 && x >=s 17
727 define i1 @and_slt_sge(i8 %x) {
728 ; CHECK-LABEL: @and_slt_sge(
729 ; CHECK-NEXT:    ret i1 false
731   %a = icmp slt i8 %x, 13
732   %b = icmp sge i8 %x, 17
733   %c = and i1 %a, %b
734   ret i1 %c
737 ; x <s 13 && x >s 17
739 define i1 @and_slt_sgt(i8 %x) {
740 ; CHECK-LABEL: @and_slt_sgt(
741 ; CHECK-NEXT:    ret i1 false
743   %a = icmp slt i8 %x, 13
744   %b = icmp sgt i8 %x, 17
745   %c = and i1 %a, %b
746   ret i1 %c
749 ; x <s 13 && x <=s 17
751 define i1 @and_slt_sle(i8 %x) {
752 ; CHECK-LABEL: @and_slt_sle(
753 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
754 ; CHECK-NEXT:    ret i1 [[A]]
756   %a = icmp slt i8 %x, 13
757   %b = icmp sle i8 %x, 17
758   %c = and i1 %a, %b
759   ret i1 %c
762 ; x <s 13 && x <s 17
764 define i1 @and_slt_slt(i8 %x) {
765 ; CHECK-LABEL: @and_slt_slt(
766 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
767 ; CHECK-NEXT:    ret i1 [[A]]
769   %a = icmp slt i8 %x, 13
770   %b = icmp slt i8 %x, 17
771   %c = and i1 %a, %b
772   ret i1 %c
775 ; x <s 13 && x >=u 17
777 define i1 @and_slt_uge(i8 %x) {
778 ; CHECK-LABEL: @and_slt_uge(
779 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
780 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
781 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
782 ; CHECK-NEXT:    ret i1 [[C]]
784   %a = icmp slt i8 %x, 13
785   %b = icmp uge i8 %x, 17
786   %c = and i1 %a, %b
787   ret i1 %c
790 ; x <s 13 && x >u 17
792 define i1 @and_slt_ugt(i8 %x) {
793 ; CHECK-LABEL: @and_slt_ugt(
794 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
795 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
796 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
797 ; CHECK-NEXT:    ret i1 [[C]]
799   %a = icmp slt i8 %x, 13
800   %b = icmp ugt i8 %x, 17
801   %c = and i1 %a, %b
802   ret i1 %c
805 ; x <s 13 && x <=u 17
807 define i1 @and_slt_ule(i8 %x) {
808 ; CHECK-LABEL: @and_slt_ule(
809 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
810 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
811 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
812 ; CHECK-NEXT:    ret i1 [[C]]
814   %a = icmp slt i8 %x, 13
815   %b = icmp ule i8 %x, 17
816   %c = and i1 %a, %b
817   ret i1 %c
820 ; x <s 13 && x <u 17
822 define i1 @and_slt_ult(i8 %x) {
823 ; CHECK-LABEL: @and_slt_ult(
824 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
825 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
826 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
827 ; CHECK-NEXT:    ret i1 [[C]]
829   %a = icmp slt i8 %x, 13
830   %b = icmp ult i8 %x, 17
831   %c = and i1 %a, %b
832   ret i1 %c
835 ; uge
836 ; x >=u 13 && x == 17
838 define i1 @and_uge_eq(i8 %x) {
839 ; CHECK-LABEL: @and_uge_eq(
840 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
841 ; CHECK-NEXT:    ret i1 [[B]]
843   %a = icmp uge i8 %x, 13
844   %b = icmp eq i8 %x, 17
845   %c = and i1 %a, %b
846   ret i1 %c
849 ; x >=u 13 && x != 17
851 define i1 @and_uge_ne(i8 %x) {
852 ; CHECK-LABEL: @and_uge_ne(
853 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
854 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
855 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
856 ; CHECK-NEXT:    ret i1 [[C]]
858   %a = icmp uge i8 %x, 13
859   %b = icmp ne i8 %x, 17
860   %c = and i1 %a, %b
861   ret i1 %c
864 ; x >=u 13 && x >=s 17
866 define i1 @and_uge_sge(i8 %x) {
867 ; CHECK-LABEL: @and_uge_sge(
868 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
869 ; CHECK-NEXT:    ret i1 [[B]]
871   %a = icmp uge i8 %x, 13
872   %b = icmp sge i8 %x, 17
873   %c = and i1 %a, %b
874   ret i1 %c
877 ; x >=u 13 && x >s 17
879 define i1 @and_uge_sgt(i8 %x) {
880 ; CHECK-LABEL: @and_uge_sgt(
881 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
882 ; CHECK-NEXT:    ret i1 [[B]]
884   %a = icmp uge i8 %x, 13
885   %b = icmp sgt i8 %x, 17
886   %c = and i1 %a, %b
887   ret i1 %c
890 ; x >=u 13 && x <=s 17
892 define i1 @and_uge_sle(i8 %x) {
893 ; CHECK-LABEL: @and_uge_sle(
894 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
895 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
896 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
897 ; CHECK-NEXT:    ret i1 [[C]]
899   %a = icmp uge i8 %x, 13
900   %b = icmp sle i8 %x, 17
901   %c = and i1 %a, %b
902   ret i1 %c
905 ; x >=u 13 && x <s 17
907 define i1 @and_uge_slt(i8 %x) {
908 ; CHECK-LABEL: @and_uge_slt(
909 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
910 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
911 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
912 ; CHECK-NEXT:    ret i1 [[C]]
914   %a = icmp uge i8 %x, 13
915   %b = icmp slt i8 %x, 17
916   %c = and i1 %a, %b
917   ret i1 %c
920 ; x >=u 13 && x >=u 17
922 define i1 @and_uge_uge(i8 %x) {
923 ; CHECK-LABEL: @and_uge_uge(
924 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
925 ; CHECK-NEXT:    ret i1 [[B]]
927   %a = icmp uge i8 %x, 13
928   %b = icmp uge i8 %x, 17
929   %c = and i1 %a, %b
930   ret i1 %c
933 ; x >=u 13 && x >u 17
935 define i1 @and_uge_ugt(i8 %x) {
936 ; CHECK-LABEL: @and_uge_ugt(
937 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
938 ; CHECK-NEXT:    ret i1 [[B]]
940   %a = icmp uge i8 %x, 13
941   %b = icmp ugt i8 %x, 17
942   %c = and i1 %a, %b
943   ret i1 %c
946 ; x >=u 13 && x <=u 17
948 define i1 @and_uge_ule(i8 %x) {
949 ; CHECK-LABEL: @and_uge_ule(
950 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
951 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
952 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
953 ; CHECK-NEXT:    ret i1 [[C]]
955   %a = icmp uge i8 %x, 13
956   %b = icmp ule i8 %x, 17
957   %c = and i1 %a, %b
958   ret i1 %c
961 ; x >=u 13 && x <u 17
963 define i1 @and_uge_ult(i8 %x) {
964 ; CHECK-LABEL: @and_uge_ult(
965 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
966 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
967 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
968 ; CHECK-NEXT:    ret i1 [[C]]
970   %a = icmp uge i8 %x, 13
971   %b = icmp ult i8 %x, 17
972   %c = and i1 %a, %b
973   ret i1 %c
976 ; ugt
977 ; x >u 13 && x == 17
979 define i1 @and_ugt_eq(i8 %x) {
980 ; CHECK-LABEL: @and_ugt_eq(
981 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
982 ; CHECK-NEXT:    ret i1 [[B]]
984   %a = icmp ugt i8 %x, 13
985   %b = icmp eq i8 %x, 17
986   %c = and i1 %a, %b
987   ret i1 %c
990 ; x >u 13 && x != 17
992 define i1 @and_ugt_ne(i8 %x) {
993 ; CHECK-LABEL: @and_ugt_ne(
994 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
995 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
996 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
997 ; CHECK-NEXT:    ret i1 [[C]]
999   %a = icmp ugt i8 %x, 13
1000   %b = icmp ne i8 %x, 17
1001   %c = and i1 %a, %b
1002   ret i1 %c
1005 ; x >u 13 && x >=s 17
1007 define i1 @and_ugt_sge(i8 %x) {
1008 ; CHECK-LABEL: @and_ugt_sge(
1009 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
1010 ; CHECK-NEXT:    ret i1 [[B]]
1012   %a = icmp ugt i8 %x, 13
1013   %b = icmp sge i8 %x, 17
1014   %c = and i1 %a, %b
1015   ret i1 %c
1018 ; x >u 13 && x >s 17
1020 define i1 @and_ugt_sgt(i8 %x) {
1021 ; CHECK-LABEL: @and_ugt_sgt(
1022 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
1023 ; CHECK-NEXT:    ret i1 [[B]]
1025   %a = icmp ugt i8 %x, 13
1026   %b = icmp sgt i8 %x, 17
1027   %c = and i1 %a, %b
1028   ret i1 %c
1031 ; x >u 13 && x <=s 17
1033 define i1 @and_ugt_sle(i8 %x) {
1034 ; CHECK-LABEL: @and_ugt_sle(
1035 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
1036 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
1037 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1038 ; CHECK-NEXT:    ret i1 [[C]]
1040   %a = icmp ugt i8 %x, 13
1041   %b = icmp sle i8 %x, 17
1042   %c = and i1 %a, %b
1043   ret i1 %c
1046 ; x >u 13 && x <s 17
1048 define i1 @and_ugt_slt(i8 %x) {
1049 ; CHECK-LABEL: @and_ugt_slt(
1050 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
1051 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
1052 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1053 ; CHECK-NEXT:    ret i1 [[C]]
1055   %a = icmp ugt i8 %x, 13
1056   %b = icmp slt i8 %x, 17
1057   %c = and i1 %a, %b
1058   ret i1 %c
1061 ; x >u 13 && x >=u 17
1063 define i1 @and_ugt_uge(i8 %x) {
1064 ; CHECK-LABEL: @and_ugt_uge(
1065 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
1066 ; CHECK-NEXT:    ret i1 [[B]]
1068   %a = icmp ugt i8 %x, 13
1069   %b = icmp uge i8 %x, 17
1070   %c = and i1 %a, %b
1071   ret i1 %c
1074 ; x >u 13 && x >u 17
1076 define i1 @and_ugt_ugt(i8 %x) {
1077 ; CHECK-LABEL: @and_ugt_ugt(
1078 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
1079 ; CHECK-NEXT:    ret i1 [[B]]
1081   %a = icmp ugt i8 %x, 13
1082   %b = icmp ugt i8 %x, 17
1083   %c = and i1 %a, %b
1084   ret i1 %c
1087 ; x >u 13 && x <=u 17
1089 define i1 @and_ugt_ule(i8 %x) {
1090 ; CHECK-LABEL: @and_ugt_ule(
1091 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
1092 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
1093 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1094 ; CHECK-NEXT:    ret i1 [[C]]
1096   %a = icmp ugt i8 %x, 13
1097   %b = icmp ule i8 %x, 17
1098   %c = and i1 %a, %b
1099   ret i1 %c
1102 ; x >u 13 && x <u 17
1104 define i1 @and_ugt_ult(i8 %x) {
1105 ; CHECK-LABEL: @and_ugt_ult(
1106 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
1107 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
1108 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1109 ; CHECK-NEXT:    ret i1 [[C]]
1111   %a = icmp ugt i8 %x, 13
1112   %b = icmp ult i8 %x, 17
1113   %c = and i1 %a, %b
1114   ret i1 %c
1117 ; ule
1118 ; x <=u 13 && x == 17
1120 define i1 @and_ule_eq(i8 %x) {
1121 ; CHECK-LABEL: @and_ule_eq(
1122 ; CHECK-NEXT:    ret i1 false
1124   %a = icmp ule i8 %x, 13
1125   %b = icmp eq i8 %x, 17
1126   %c = and i1 %a, %b
1127   ret i1 %c
1130 ; x <=u 13 && x != 17
1132 define i1 @and_ule_ne(i8 %x) {
1133 ; CHECK-LABEL: @and_ule_ne(
1134 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
1135 ; CHECK-NEXT:    ret i1 [[A]]
1137   %a = icmp ule i8 %x, 13
1138   %b = icmp ne i8 %x, 17
1139   %c = and i1 %a, %b
1140   ret i1 %c
1143 ; x <=u 13 && x >=s 17
1145 define i1 @and_ule_sge(i8 %x) {
1146 ; CHECK-LABEL: @and_ule_sge(
1147 ; CHECK-NEXT:    ret i1 false
1149   %a = icmp ule i8 %x, 13
1150   %b = icmp sge i8 %x, 17
1151   %c = and i1 %a, %b
1152   ret i1 %c
1155 ; x <=u 13 && x >s 17
1157 define i1 @and_ule_sgt(i8 %x) {
1158 ; CHECK-LABEL: @and_ule_sgt(
1159 ; CHECK-NEXT:    ret i1 false
1161   %a = icmp ule i8 %x, 13
1162   %b = icmp sgt i8 %x, 17
1163   %c = and i1 %a, %b
1164   ret i1 %c
1167 ; x <=u 13 && x <=s 17
1169 define i1 @and_ule_sle(i8 %x) {
1170 ; CHECK-LABEL: @and_ule_sle(
1171 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
1172 ; CHECK-NEXT:    ret i1 [[A]]
1174   %a = icmp ule i8 %x, 13
1175   %b = icmp sle i8 %x, 17
1176   %c = and i1 %a, %b
1177   ret i1 %c
1180 ; x <=u 13 && x <s 17
1182 define i1 @and_ule_slt(i8 %x) {
1183 ; CHECK-LABEL: @and_ule_slt(
1184 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
1185 ; CHECK-NEXT:    ret i1 [[A]]
1187   %a = icmp ule i8 %x, 13
1188   %b = icmp slt i8 %x, 17
1189   %c = and i1 %a, %b
1190   ret i1 %c
1193 ; x <=u 13 && x >=u 17
1195 define i1 @and_ule_uge(i8 %x) {
1196 ; CHECK-LABEL: @and_ule_uge(
1197 ; CHECK-NEXT:    ret i1 false
1199   %a = icmp ule i8 %x, 13
1200   %b = icmp uge i8 %x, 17
1201   %c = and i1 %a, %b
1202   ret i1 %c
1205 ; x <=u 13 && x >u 17
1207 define i1 @and_ule_ugt(i8 %x) {
1208 ; CHECK-LABEL: @and_ule_ugt(
1209 ; CHECK-NEXT:    ret i1 false
1211   %a = icmp ule i8 %x, 13
1212   %b = icmp ugt i8 %x, 17
1213   %c = and i1 %a, %b
1214   ret i1 %c
1217 ; x <=u 13 && x <=u 17
1219 define i1 @and_ule_ule(i8 %x) {
1220 ; CHECK-LABEL: @and_ule_ule(
1221 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
1222 ; CHECK-NEXT:    ret i1 [[A]]
1224   %a = icmp ule i8 %x, 13
1225   %b = icmp ule i8 %x, 17
1226   %c = and i1 %a, %b
1227   ret i1 %c
1230 ; x <=u 13 && x <u 17
1232 define i1 @and_ule_ult(i8 %x) {
1233 ; CHECK-LABEL: @and_ule_ult(
1234 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
1235 ; CHECK-NEXT:    ret i1 [[A]]
1237   %a = icmp ule i8 %x, 13
1238   %b = icmp ult i8 %x, 17
1239   %c = and i1 %a, %b
1240   ret i1 %c
1243 ; ult
1244 ; x <u 13 && x == 17
1246 define i1 @and_ult_eq(i8 %x) {
1247 ; CHECK-LABEL: @and_ult_eq(
1248 ; CHECK-NEXT:    ret i1 false
1250   %a = icmp ult i8 %x, 13
1251   %b = icmp eq i8 %x, 17
1252   %c = and i1 %a, %b
1253   ret i1 %c
1256 ; x <u 13 && x != 17
1258 define i1 @and_ult_ne(i8 %x) {
1259 ; CHECK-LABEL: @and_ult_ne(
1260 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
1261 ; CHECK-NEXT:    ret i1 [[A]]
1263   %a = icmp ult i8 %x, 13
1264   %b = icmp ne i8 %x, 17
1265   %c = and i1 %a, %b
1266   ret i1 %c
1269 ; x <u 13 && x >=s 17
1271 define i1 @and_ult_sge(i8 %x) {
1272 ; CHECK-LABEL: @and_ult_sge(
1273 ; CHECK-NEXT:    ret i1 false
1275   %a = icmp ult i8 %x, 13
1276   %b = icmp sge i8 %x, 17
1277   %c = and i1 %a, %b
1278   ret i1 %c
1281 ; x <u 13 && x >s 17
1283 define i1 @and_ult_sgt(i8 %x) {
1284 ; CHECK-LABEL: @and_ult_sgt(
1285 ; CHECK-NEXT:    ret i1 false
1287   %a = icmp ult i8 %x, 13
1288   %b = icmp sgt i8 %x, 17
1289   %c = and i1 %a, %b
1290   ret i1 %c
1293 ; x <u 13 && x <=s 17
1295 define i1 @and_ult_sle(i8 %x) {
1296 ; CHECK-LABEL: @and_ult_sle(
1297 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
1298 ; CHECK-NEXT:    ret i1 [[A]]
1300   %a = icmp ult i8 %x, 13
1301   %b = icmp sle i8 %x, 17
1302   %c = and i1 %a, %b
1303   ret i1 %c
1306 ; x <u 13 && x <s 17
1308 define i1 @and_ult_slt(i8 %x) {
1309 ; CHECK-LABEL: @and_ult_slt(
1310 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
1311 ; CHECK-NEXT:    ret i1 [[A]]
1313   %a = icmp ult i8 %x, 13
1314   %b = icmp slt i8 %x, 17
1315   %c = and i1 %a, %b
1316   ret i1 %c
1319 ; x <u 13 && x >=u 17
1321 define i1 @and_ult_uge(i8 %x) {
1322 ; CHECK-LABEL: @and_ult_uge(
1323 ; CHECK-NEXT:    ret i1 false
1325   %a = icmp ult i8 %x, 13
1326   %b = icmp uge i8 %x, 17
1327   %c = and i1 %a, %b
1328   ret i1 %c
1331 ; x <u 13 && x >u 17
1333 define i1 @and_ult_ugt(i8 %x) {
1334 ; CHECK-LABEL: @and_ult_ugt(
1335 ; CHECK-NEXT:    ret i1 false
1337   %a = icmp ult i8 %x, 13
1338   %b = icmp ugt i8 %x, 17
1339   %c = and i1 %a, %b
1340   ret i1 %c
1343 ; x <u 13 && x <=u 17
1345 define i1 @and_ult_ule(i8 %x) {
1346 ; CHECK-LABEL: @and_ult_ule(
1347 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
1348 ; CHECK-NEXT:    ret i1 [[A]]
1350   %a = icmp ult i8 %x, 13
1351   %b = icmp ule i8 %x, 17
1352   %c = and i1 %a, %b
1353   ret i1 %c
1356 ; x <u 13 && x <u 17
1358 define i1 @and_ult_ult(i8 %x) {
1359 ; CHECK-LABEL: @and_ult_ult(
1360 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
1361 ; CHECK-NEXT:    ret i1 [[A]]
1363   %a = icmp ult i8 %x, 13
1364   %b = icmp ult i8 %x, 17
1365   %c = and i1 %a, %b
1366   ret i1 %c
1369 ; eq
1370 ; x == 23 && x == 17
1372 define i1 @and_eq_eq_swap(i8 %x) {
1373 ; CHECK-LABEL: @and_eq_eq_swap(
1374 ; CHECK-NEXT:    ret i1 false
1376   %a = icmp eq i8 %x, 23
1377   %b = icmp eq i8 %x, 17
1378   %c = and i1 %a, %b
1379   ret i1 %c
1382 ; x == 23 && x != 17
1384 define i1 @and_eq_ne_swap(i8 %x) {
1385 ; CHECK-LABEL: @and_eq_ne_swap(
1386 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
1387 ; CHECK-NEXT:    ret i1 [[A]]
1389   %a = icmp eq i8 %x, 23
1390   %b = icmp ne i8 %x, 17
1391   %c = and i1 %a, %b
1392   ret i1 %c
1395 ; x == 23 && x >=s 17
1397 define i1 @and_eq_sge_swap(i8 %x) {
1398 ; CHECK-LABEL: @and_eq_sge_swap(
1399 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
1400 ; CHECK-NEXT:    ret i1 [[A]]
1402   %a = icmp eq i8 %x, 23
1403   %b = icmp sge i8 %x, 17
1404   %c = and i1 %a, %b
1405   ret i1 %c
1408 ; x == 23 && x >s 17
1410 define i1 @and_eq_sgt_swap(i8 %x) {
1411 ; CHECK-LABEL: @and_eq_sgt_swap(
1412 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
1413 ; CHECK-NEXT:    ret i1 [[A]]
1415   %a = icmp eq i8 %x, 23
1416   %b = icmp sgt i8 %x, 17
1417   %c = and i1 %a, %b
1418   ret i1 %c
1421 ; x == 23 && x <=s 17
1423 define i1 @and_eq_sle_swap(i8 %x) {
1424 ; CHECK-LABEL: @and_eq_sle_swap(
1425 ; CHECK-NEXT:    ret i1 false
1427   %a = icmp eq i8 %x, 23
1428   %b = icmp sle i8 %x, 17
1429   %c = and i1 %a, %b
1430   ret i1 %c
1433 ; x == 23 && x <s 17
1435 define i1 @and_eq_slt_swap(i8 %x) {
1436 ; CHECK-LABEL: @and_eq_slt_swap(
1437 ; CHECK-NEXT:    ret i1 false
1439   %a = icmp eq i8 %x, 23
1440   %b = icmp slt i8 %x, 17
1441   %c = and i1 %a, %b
1442   ret i1 %c
1445 ; x == 23 && x >=u 17
1447 define i1 @and_eq_uge_swap(i8 %x) {
1448 ; CHECK-LABEL: @and_eq_uge_swap(
1449 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
1450 ; CHECK-NEXT:    ret i1 [[A]]
1452   %a = icmp eq i8 %x, 23
1453   %b = icmp uge i8 %x, 17
1454   %c = and i1 %a, %b
1455   ret i1 %c
1458 ; x == 23 && x >u 17
1460 define i1 @and_eq_ugt_swap(i8 %x) {
1461 ; CHECK-LABEL: @and_eq_ugt_swap(
1462 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
1463 ; CHECK-NEXT:    ret i1 [[A]]
1465   %a = icmp eq i8 %x, 23
1466   %b = icmp ugt i8 %x, 17
1467   %c = and i1 %a, %b
1468   ret i1 %c
1471 ; x == 23 && x <=u 17
1473 define i1 @and_eq_ule_swap(i8 %x) {
1474 ; CHECK-LABEL: @and_eq_ule_swap(
1475 ; CHECK-NEXT:    ret i1 false
1477   %a = icmp eq i8 %x, 23
1478   %b = icmp ule i8 %x, 17
1479   %c = and i1 %a, %b
1480   ret i1 %c
1483 ; x == 23 && x <u 17
1485 define i1 @and_eq_ult_swap(i8 %x) {
1486 ; CHECK-LABEL: @and_eq_ult_swap(
1487 ; CHECK-NEXT:    ret i1 false
1489   %a = icmp eq i8 %x, 23
1490   %b = icmp ult i8 %x, 17
1491   %c = and i1 %a, %b
1492   ret i1 %c
1495 ; ne
1496 ; x != 23 && x == 17
1498 define i1 @and_ne_eq_swap(i8 %x) {
1499 ; CHECK-LABEL: @and_ne_eq_swap(
1500 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
1501 ; CHECK-NEXT:    ret i1 [[B]]
1503   %a = icmp ne i8 %x, 23
1504   %b = icmp eq i8 %x, 17
1505   %c = and i1 %a, %b
1506   ret i1 %c
1509 ; x != 23 && x != 17
1511 define i1 @and_ne_ne_swap(i8 %x) {
1512 ; CHECK-LABEL: @and_ne_ne_swap(
1513 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
1514 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
1515 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1516 ; CHECK-NEXT:    ret i1 [[C]]
1518   %a = icmp ne i8 %x, 23
1519   %b = icmp ne i8 %x, 17
1520   %c = and i1 %a, %b
1521   ret i1 %c
1524 ; x != 23 && x >=s 17
1526 define i1 @and_ne_sge_swap(i8 %x) {
1527 ; CHECK-LABEL: @and_ne_sge_swap(
1528 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
1529 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
1530 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1531 ; CHECK-NEXT:    ret i1 [[C]]
1533   %a = icmp ne i8 %x, 23
1534   %b = icmp sge i8 %x, 17
1535   %c = and i1 %a, %b
1536   ret i1 %c
1539 ; x != 23 && x >s 17
1541 define i1 @and_ne_sgt_swap(i8 %x) {
1542 ; CHECK-LABEL: @and_ne_sgt_swap(
1543 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
1544 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
1545 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1546 ; CHECK-NEXT:    ret i1 [[C]]
1548   %a = icmp ne i8 %x, 23
1549   %b = icmp sgt i8 %x, 17
1550   %c = and i1 %a, %b
1551   ret i1 %c
1554 ; x != 23 && x <=s 17
1556 define i1 @and_ne_sle_swap(i8 %x) {
1557 ; CHECK-LABEL: @and_ne_sle_swap(
1558 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
1559 ; CHECK-NEXT:    ret i1 [[B]]
1561   %a = icmp ne i8 %x, 23
1562   %b = icmp sle i8 %x, 17
1563   %c = and i1 %a, %b
1564   ret i1 %c
1567 ; x != 23 && x <s 17
1569 define i1 @and_ne_slt_swap(i8 %x) {
1570 ; CHECK-LABEL: @and_ne_slt_swap(
1571 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
1572 ; CHECK-NEXT:    ret i1 [[B]]
1574   %a = icmp ne i8 %x, 23
1575   %b = icmp slt i8 %x, 17
1576   %c = and i1 %a, %b
1577   ret i1 %c
1580 ; x != 23 && x >=u 17
1582 define i1 @and_ne_uge_swap(i8 %x) {
1583 ; CHECK-LABEL: @and_ne_uge_swap(
1584 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
1585 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
1586 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1587 ; CHECK-NEXT:    ret i1 [[C]]
1589   %a = icmp ne i8 %x, 23
1590   %b = icmp uge i8 %x, 17
1591   %c = and i1 %a, %b
1592   ret i1 %c
1595 ; x != 23 && x >u 17
1597 define i1 @and_ne_ugt_swap(i8 %x) {
1598 ; CHECK-LABEL: @and_ne_ugt_swap(
1599 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
1600 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
1601 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1602 ; CHECK-NEXT:    ret i1 [[C]]
1604   %a = icmp ne i8 %x, 23
1605   %b = icmp ugt i8 %x, 17
1606   %c = and i1 %a, %b
1607   ret i1 %c
1610 ; x != 23 && x <=u 17
1612 define i1 @and_ne_ule_swap(i8 %x) {
1613 ; CHECK-LABEL: @and_ne_ule_swap(
1614 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
1615 ; CHECK-NEXT:    ret i1 [[B]]
1617   %a = icmp ne i8 %x, 23
1618   %b = icmp ule i8 %x, 17
1619   %c = and i1 %a, %b
1620   ret i1 %c
1623 ; x != 23 && x <u 17
1625 define i1 @and_ne_ult_swap(i8 %x) {
1626 ; CHECK-LABEL: @and_ne_ult_swap(
1627 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
1628 ; CHECK-NEXT:    ret i1 [[B]]
1630   %a = icmp ne i8 %x, 23
1631   %b = icmp ult i8 %x, 17
1632   %c = and i1 %a, %b
1633   ret i1 %c
1636 ; sge
1637 ; x >=s 23 && x == 17
1639 define i1 @and_sge_eq_swap(i8 %x) {
1640 ; CHECK-LABEL: @and_sge_eq_swap(
1641 ; CHECK-NEXT:    ret i1 false
1643   %a = icmp sge i8 %x, 23
1644   %b = icmp eq i8 %x, 17
1645   %c = and i1 %a, %b
1646   ret i1 %c
1649 ; x >=s 23 && x != 17
1651 define i1 @and_sge_ne_swap(i8 %x) {
1652 ; CHECK-LABEL: @and_sge_ne_swap(
1653 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
1654 ; CHECK-NEXT:    ret i1 [[A]]
1656   %a = icmp sge i8 %x, 23
1657   %b = icmp ne i8 %x, 17
1658   %c = and i1 %a, %b
1659   ret i1 %c
1662 ; x >=s 23 && x >=s 17
1664 define i1 @and_sge_sge_swap(i8 %x) {
1665 ; CHECK-LABEL: @and_sge_sge_swap(
1666 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
1667 ; CHECK-NEXT:    ret i1 [[A]]
1669   %a = icmp sge i8 %x, 23
1670   %b = icmp sge i8 %x, 17
1671   %c = and i1 %a, %b
1672   ret i1 %c
1675 ; x >=s 23 && x >s 17
1677 define i1 @and_sge_sgt_swap(i8 %x) {
1678 ; CHECK-LABEL: @and_sge_sgt_swap(
1679 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
1680 ; CHECK-NEXT:    ret i1 [[A]]
1682   %a = icmp sge i8 %x, 23
1683   %b = icmp sgt i8 %x, 17
1684   %c = and i1 %a, %b
1685   ret i1 %c
1688 ; x >=s 23 && x <=s 17
1690 define i1 @and_sge_sle_swap(i8 %x) {
1691 ; CHECK-LABEL: @and_sge_sle_swap(
1692 ; CHECK-NEXT:    ret i1 false
1694   %a = icmp sge i8 %x, 23
1695   %b = icmp sle i8 %x, 17
1696   %c = and i1 %a, %b
1697   ret i1 %c
1700 ; x >=s 23 && x <s 17
1702 define i1 @and_sge_slt_swap(i8 %x) {
1703 ; CHECK-LABEL: @and_sge_slt_swap(
1704 ; CHECK-NEXT:    ret i1 false
1706   %a = icmp sge i8 %x, 23
1707   %b = icmp slt i8 %x, 17
1708   %c = and i1 %a, %b
1709   ret i1 %c
1712 ; x >=s 23 && x >=u 17
1714 define i1 @and_sge_uge_swap(i8 %x) {
1715 ; CHECK-LABEL: @and_sge_uge_swap(
1716 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
1717 ; CHECK-NEXT:    ret i1 [[A]]
1719   %a = icmp sge i8 %x, 23
1720   %b = icmp uge i8 %x, 17
1721   %c = and i1 %a, %b
1722   ret i1 %c
1725 ; x >=s 23 && x >u 17
1727 define i1 @and_sge_ugt_swap(i8 %x) {
1728 ; CHECK-LABEL: @and_sge_ugt_swap(
1729 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
1730 ; CHECK-NEXT:    ret i1 [[A]]
1732   %a = icmp sge i8 %x, 23
1733   %b = icmp ugt i8 %x, 17
1734   %c = and i1 %a, %b
1735   ret i1 %c
1738 ; x >=s 23 && x <=u 17
1740 define i1 @and_sge_ule_swap(i8 %x) {
1741 ; CHECK-LABEL: @and_sge_ule_swap(
1742 ; CHECK-NEXT:    ret i1 false
1744   %a = icmp sge i8 %x, 23
1745   %b = icmp ule i8 %x, 17
1746   %c = and i1 %a, %b
1747   ret i1 %c
1750 ; x >=s 23 && x <u 17
1752 define i1 @and_sge_ult_swap(i8 %x) {
1753 ; CHECK-LABEL: @and_sge_ult_swap(
1754 ; CHECK-NEXT:    ret i1 false
1756   %a = icmp sge i8 %x, 23
1757   %b = icmp ult i8 %x, 17
1758   %c = and i1 %a, %b
1759   ret i1 %c
1762 ; sgt
1763 ; x >s 23 && x == 17
1765 define i1 @and_sgt_eq_swap(i8 %x) {
1766 ; CHECK-LABEL: @and_sgt_eq_swap(
1767 ; CHECK-NEXT:    ret i1 false
1769   %a = icmp sgt i8 %x, 23
1770   %b = icmp eq i8 %x, 17
1771   %c = and i1 %a, %b
1772   ret i1 %c
1775 ; x >s 23 && x != 17
1777 define i1 @and_sgt_ne_swap(i8 %x) {
1778 ; CHECK-LABEL: @and_sgt_ne_swap(
1779 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
1780 ; CHECK-NEXT:    ret i1 [[A]]
1782   %a = icmp sgt i8 %x, 23
1783   %b = icmp ne i8 %x, 17
1784   %c = and i1 %a, %b
1785   ret i1 %c
1788 ; x >s 23 && x >=s 17
1790 define i1 @and_sgt_sge_swap(i8 %x) {
1791 ; CHECK-LABEL: @and_sgt_sge_swap(
1792 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
1793 ; CHECK-NEXT:    ret i1 [[A]]
1795   %a = icmp sgt i8 %x, 23
1796   %b = icmp sge i8 %x, 17
1797   %c = and i1 %a, %b
1798   ret i1 %c
1801 ; x >s 23 && x >s 17
1803 define i1 @and_sgt_sgt_swap(i8 %x) {
1804 ; CHECK-LABEL: @and_sgt_sgt_swap(
1805 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
1806 ; CHECK-NEXT:    ret i1 [[A]]
1808   %a = icmp sgt i8 %x, 23
1809   %b = icmp sgt i8 %x, 17
1810   %c = and i1 %a, %b
1811   ret i1 %c
1814 ; x >s 23 && x <=s 17
1816 define i1 @and_sgt_sle_swap(i8 %x) {
1817 ; CHECK-LABEL: @and_sgt_sle_swap(
1818 ; CHECK-NEXT:    ret i1 false
1820   %a = icmp sgt i8 %x, 23
1821   %b = icmp sle i8 %x, 17
1822   %c = and i1 %a, %b
1823   ret i1 %c
1826 ; x >s 23 && x <s 17
1828 define i1 @and_sgt_slt_swap(i8 %x) {
1829 ; CHECK-LABEL: @and_sgt_slt_swap(
1830 ; CHECK-NEXT:    ret i1 false
1832   %a = icmp sgt i8 %x, 23
1833   %b = icmp slt i8 %x, 17
1834   %c = and i1 %a, %b
1835   ret i1 %c
1838 ; x >s 23 && x >=u 17
1840 define i1 @and_sgt_uge_swap(i8 %x) {
1841 ; CHECK-LABEL: @and_sgt_uge_swap(
1842 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
1843 ; CHECK-NEXT:    ret i1 [[A]]
1845   %a = icmp sgt i8 %x, 23
1846   %b = icmp uge i8 %x, 17
1847   %c = and i1 %a, %b
1848   ret i1 %c
1851 ; x >s 23 && x >u 17
1853 define i1 @and_sgt_ugt_swap(i8 %x) {
1854 ; CHECK-LABEL: @and_sgt_ugt_swap(
1855 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
1856 ; CHECK-NEXT:    ret i1 [[A]]
1858   %a = icmp sgt i8 %x, 23
1859   %b = icmp ugt i8 %x, 17
1860   %c = and i1 %a, %b
1861   ret i1 %c
1864 ; x >s 23 && x <=u 17
1866 define i1 @and_sgt_ule_swap(i8 %x) {
1867 ; CHECK-LABEL: @and_sgt_ule_swap(
1868 ; CHECK-NEXT:    ret i1 false
1870   %a = icmp sgt i8 %x, 23
1871   %b = icmp ule i8 %x, 17
1872   %c = and i1 %a, %b
1873   ret i1 %c
1876 ; x >s 23 && x <u 17
1878 define i1 @and_sgt_ult_swap(i8 %x) {
1879 ; CHECK-LABEL: @and_sgt_ult_swap(
1880 ; CHECK-NEXT:    ret i1 false
1882   %a = icmp sgt i8 %x, 23
1883   %b = icmp ult i8 %x, 17
1884   %c = and i1 %a, %b
1885   ret i1 %c
1888 ; sle
1889 ; x <=s 23 && x == 17
1891 define i1 @and_sle_eq_swap(i8 %x) {
1892 ; CHECK-LABEL: @and_sle_eq_swap(
1893 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
1894 ; CHECK-NEXT:    ret i1 [[B]]
1896   %a = icmp sle i8 %x, 23
1897   %b = icmp eq i8 %x, 17
1898   %c = and i1 %a, %b
1899   ret i1 %c
1902 ; x <=s 23 && x != 17
1904 define i1 @and_sle_ne_swap(i8 %x) {
1905 ; CHECK-LABEL: @and_sle_ne_swap(
1906 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
1907 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
1908 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1909 ; CHECK-NEXT:    ret i1 [[C]]
1911   %a = icmp sle i8 %x, 23
1912   %b = icmp ne i8 %x, 17
1913   %c = and i1 %a, %b
1914   ret i1 %c
1917 ; x <=s 23 && x >=s 17
1919 define i1 @and_sle_sge_swap(i8 %x) {
1920 ; CHECK-LABEL: @and_sle_sge_swap(
1921 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
1922 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
1923 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1924 ; CHECK-NEXT:    ret i1 [[C]]
1926   %a = icmp sle i8 %x, 23
1927   %b = icmp sge i8 %x, 17
1928   %c = and i1 %a, %b
1929   ret i1 %c
1932 ; x <=s 23 && x >s 17
1934 define i1 @and_sle_sgt_swap(i8 %x) {
1935 ; CHECK-LABEL: @and_sle_sgt_swap(
1936 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
1937 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
1938 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1939 ; CHECK-NEXT:    ret i1 [[C]]
1941   %a = icmp sle i8 %x, 23
1942   %b = icmp sgt i8 %x, 17
1943   %c = and i1 %a, %b
1944   ret i1 %c
1947 ; x <=s 23 && x <=s 17
1949 define i1 @and_sle_sle_swap(i8 %x) {
1950 ; CHECK-LABEL: @and_sle_sle_swap(
1951 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
1952 ; CHECK-NEXT:    ret i1 [[B]]
1954   %a = icmp sle i8 %x, 23
1955   %b = icmp sle i8 %x, 17
1956   %c = and i1 %a, %b
1957   ret i1 %c
1960 ; x <=s 23 && x <s 17
1962 define i1 @and_sle_slt_swap(i8 %x) {
1963 ; CHECK-LABEL: @and_sle_slt_swap(
1964 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
1965 ; CHECK-NEXT:    ret i1 [[B]]
1967   %a = icmp sle i8 %x, 23
1968   %b = icmp slt i8 %x, 17
1969   %c = and i1 %a, %b
1970   ret i1 %c
1973 ; x <=s 23 && x >=u 17
1975 define i1 @and_sle_uge_swap(i8 %x) {
1976 ; CHECK-LABEL: @and_sle_uge_swap(
1977 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
1978 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
1979 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1980 ; CHECK-NEXT:    ret i1 [[C]]
1982   %a = icmp sle i8 %x, 23
1983   %b = icmp uge i8 %x, 17
1984   %c = and i1 %a, %b
1985   ret i1 %c
1988 ; x <=s 23 && x >u 17
1990 define i1 @and_sle_ugt_swap(i8 %x) {
1991 ; CHECK-LABEL: @and_sle_ugt_swap(
1992 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
1993 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
1994 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
1995 ; CHECK-NEXT:    ret i1 [[C]]
1997   %a = icmp sle i8 %x, 23
1998   %b = icmp ugt i8 %x, 17
1999   %c = and i1 %a, %b
2000   ret i1 %c
2003 ; x <=s 23 && x <=u 17
2005 define i1 @and_sle_ule_swap(i8 %x) {
2006 ; CHECK-LABEL: @and_sle_ule_swap(
2007 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
2008 ; CHECK-NEXT:    ret i1 [[B]]
2010   %a = icmp sle i8 %x, 23
2011   %b = icmp ule i8 %x, 17
2012   %c = and i1 %a, %b
2013   ret i1 %c
2016 ; x <=s 23 && x <u 17
2018 define i1 @and_sle_ult_swap(i8 %x) {
2019 ; CHECK-LABEL: @and_sle_ult_swap(
2020 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
2021 ; CHECK-NEXT:    ret i1 [[B]]
2023   %a = icmp sle i8 %x, 23
2024   %b = icmp ult i8 %x, 17
2025   %c = and i1 %a, %b
2026   ret i1 %c
2029 ; slt
2030 ; x <s 23 && x == 17
2032 define i1 @and_slt_eq_swap(i8 %x) {
2033 ; CHECK-LABEL: @and_slt_eq_swap(
2034 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
2035 ; CHECK-NEXT:    ret i1 [[B]]
2037   %a = icmp slt i8 %x, 23
2038   %b = icmp eq i8 %x, 17
2039   %c = and i1 %a, %b
2040   ret i1 %c
2043 ; x <s 23 && x != 17
2045 define i1 @and_slt_ne_swap(i8 %x) {
2046 ; CHECK-LABEL: @and_slt_ne_swap(
2047 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
2048 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
2049 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2050 ; CHECK-NEXT:    ret i1 [[C]]
2052   %a = icmp slt i8 %x, 23
2053   %b = icmp ne i8 %x, 17
2054   %c = and i1 %a, %b
2055   ret i1 %c
2058 ; x <s 23 && x >=s 17
2060 define i1 @and_slt_sge_swap(i8 %x) {
2061 ; CHECK-LABEL: @and_slt_sge_swap(
2062 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
2063 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2064 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2065 ; CHECK-NEXT:    ret i1 [[C]]
2067   %a = icmp slt i8 %x, 23
2068   %b = icmp sge i8 %x, 17
2069   %c = and i1 %a, %b
2070   ret i1 %c
2073 ; x <s 23 && x >s 17
2075 define i1 @and_slt_sgt_swap(i8 %x) {
2076 ; CHECK-LABEL: @and_slt_sgt_swap(
2077 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
2078 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2079 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2080 ; CHECK-NEXT:    ret i1 [[C]]
2082   %a = icmp slt i8 %x, 23
2083   %b = icmp sgt i8 %x, 17
2084   %c = and i1 %a, %b
2085   ret i1 %c
2088 ; x <s 23 && x <=s 17
2090 define i1 @and_slt_sle_swap(i8 %x) {
2091 ; CHECK-LABEL: @and_slt_sle_swap(
2092 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2093 ; CHECK-NEXT:    ret i1 [[B]]
2095   %a = icmp slt i8 %x, 23
2096   %b = icmp sle i8 %x, 17
2097   %c = and i1 %a, %b
2098   ret i1 %c
2101 ; x <s 23 && x <s 17
2103 define i1 @and_slt_slt_swap(i8 %x) {
2104 ; CHECK-LABEL: @and_slt_slt_swap(
2105 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2106 ; CHECK-NEXT:    ret i1 [[B]]
2108   %a = icmp slt i8 %x, 23
2109   %b = icmp slt i8 %x, 17
2110   %c = and i1 %a, %b
2111   ret i1 %c
2114 ; x <s 23 && x >=u 17
2116 define i1 @and_slt_uge_swap(i8 %x) {
2117 ; CHECK-LABEL: @and_slt_uge_swap(
2118 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
2119 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
2120 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2121 ; CHECK-NEXT:    ret i1 [[C]]
2123   %a = icmp slt i8 %x, 23
2124   %b = icmp uge i8 %x, 17
2125   %c = and i1 %a, %b
2126   ret i1 %c
2129 ; x <s 23 && x >u 17
2131 define i1 @and_slt_ugt_swap(i8 %x) {
2132 ; CHECK-LABEL: @and_slt_ugt_swap(
2133 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
2134 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
2135 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2136 ; CHECK-NEXT:    ret i1 [[C]]
2138   %a = icmp slt i8 %x, 23
2139   %b = icmp ugt i8 %x, 17
2140   %c = and i1 %a, %b
2141   ret i1 %c
2144 ; x <s 23 && x <=u 17
2146 define i1 @and_slt_ule_swap(i8 %x) {
2147 ; CHECK-LABEL: @and_slt_ule_swap(
2148 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
2149 ; CHECK-NEXT:    ret i1 [[B]]
2151   %a = icmp slt i8 %x, 23
2152   %b = icmp ule i8 %x, 17
2153   %c = and i1 %a, %b
2154   ret i1 %c
2157 ; x <s 23 && x <u 17
2159 define i1 @and_slt_ult_swap(i8 %x) {
2160 ; CHECK-LABEL: @and_slt_ult_swap(
2161 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
2162 ; CHECK-NEXT:    ret i1 [[B]]
2164   %a = icmp slt i8 %x, 23
2165   %b = icmp ult i8 %x, 17
2166   %c = and i1 %a, %b
2167   ret i1 %c
2170 ; uge
2171 ; x >=u 23 && x == 17
2173 define i1 @and_uge_eq_swap(i8 %x) {
2174 ; CHECK-LABEL: @and_uge_eq_swap(
2175 ; CHECK-NEXT:    ret i1 false
2177   %a = icmp uge i8 %x, 23
2178   %b = icmp eq i8 %x, 17
2179   %c = and i1 %a, %b
2180   ret i1 %c
2183 ; x >=u 23 && x != 17
2185 define i1 @and_uge_ne_swap(i8 %x) {
2186 ; CHECK-LABEL: @and_uge_ne_swap(
2187 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2188 ; CHECK-NEXT:    ret i1 [[A]]
2190   %a = icmp uge i8 %x, 23
2191   %b = icmp ne i8 %x, 17
2192   %c = and i1 %a, %b
2193   ret i1 %c
2196 ; x >=u 23 && x >=s 17
2198 define i1 @and_uge_sge_swap(i8 %x) {
2199 ; CHECK-LABEL: @and_uge_sge_swap(
2200 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2201 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2202 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2203 ; CHECK-NEXT:    ret i1 [[C]]
2205   %a = icmp uge i8 %x, 23
2206   %b = icmp sge i8 %x, 17
2207   %c = and i1 %a, %b
2208   ret i1 %c
2211 ; x >=u 23 && x >s 17
2213 define i1 @and_uge_sgt_swap(i8 %x) {
2214 ; CHECK-LABEL: @and_uge_sgt_swap(
2215 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2216 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2217 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2218 ; CHECK-NEXT:    ret i1 [[C]]
2220   %a = icmp uge i8 %x, 23
2221   %b = icmp sgt i8 %x, 17
2222   %c = and i1 %a, %b
2223   ret i1 %c
2226 ; x >=u 23 && x <=s 17
2228 define i1 @and_uge_sle_swap(i8 %x) {
2229 ; CHECK-LABEL: @and_uge_sle_swap(
2230 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2231 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2232 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2233 ; CHECK-NEXT:    ret i1 [[C]]
2235   %a = icmp uge i8 %x, 23
2236   %b = icmp sle i8 %x, 17
2237   %c = and i1 %a, %b
2238   ret i1 %c
2241 ; x >=u 23 && x <s 17
2243 define i1 @and_uge_slt_swap(i8 %x) {
2244 ; CHECK-LABEL: @and_uge_slt_swap(
2245 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2246 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2247 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2248 ; CHECK-NEXT:    ret i1 [[C]]
2250   %a = icmp uge i8 %x, 23
2251   %b = icmp slt i8 %x, 17
2252   %c = and i1 %a, %b
2253   ret i1 %c
2256 ; x >=u 23 && x >=u 17
2258 define i1 @and_uge_uge_swap(i8 %x) {
2259 ; CHECK-LABEL: @and_uge_uge_swap(
2260 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2261 ; CHECK-NEXT:    ret i1 [[A]]
2263   %a = icmp uge i8 %x, 23
2264   %b = icmp uge i8 %x, 17
2265   %c = and i1 %a, %b
2266   ret i1 %c
2269 ; x >=u 23 && x >u 17
2271 define i1 @and_uge_ugt_swap(i8 %x) {
2272 ; CHECK-LABEL: @and_uge_ugt_swap(
2273 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
2274 ; CHECK-NEXT:    ret i1 [[A]]
2276   %a = icmp uge i8 %x, 23
2277   %b = icmp ugt i8 %x, 17
2278   %c = and i1 %a, %b
2279   ret i1 %c
2282 ; x >=u 23 && x <=u 17
2284 define i1 @and_uge_ule_swap(i8 %x) {
2285 ; CHECK-LABEL: @and_uge_ule_swap(
2286 ; CHECK-NEXT:    ret i1 false
2288   %a = icmp uge i8 %x, 23
2289   %b = icmp ule i8 %x, 17
2290   %c = and i1 %a, %b
2291   ret i1 %c
2294 ; x >=u 23 && x <u 17
2296 define i1 @and_uge_ult_swap(i8 %x) {
2297 ; CHECK-LABEL: @and_uge_ult_swap(
2298 ; CHECK-NEXT:    ret i1 false
2300   %a = icmp uge i8 %x, 23
2301   %b = icmp ult i8 %x, 17
2302   %c = and i1 %a, %b
2303   ret i1 %c
2306 ; ugt
2307 ; x >u 23 && x == 17
2309 define i1 @and_ugt_eq_swap(i8 %x) {
2310 ; CHECK-LABEL: @and_ugt_eq_swap(
2311 ; CHECK-NEXT:    ret i1 false
2313   %a = icmp ugt i8 %x, 23
2314   %b = icmp eq i8 %x, 17
2315   %c = and i1 %a, %b
2316   ret i1 %c
2319 ; x >u 23 && x != 17
2321 define i1 @and_ugt_ne_swap(i8 %x) {
2322 ; CHECK-LABEL: @and_ugt_ne_swap(
2323 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2324 ; CHECK-NEXT:    ret i1 [[A]]
2326   %a = icmp ugt i8 %x, 23
2327   %b = icmp ne i8 %x, 17
2328   %c = and i1 %a, %b
2329   ret i1 %c
2332 ; x >u 23 && x >=s 17
2334 define i1 @and_ugt_sge_swap(i8 %x) {
2335 ; CHECK-LABEL: @and_ugt_sge_swap(
2336 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2337 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2338 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2339 ; CHECK-NEXT:    ret i1 [[C]]
2341   %a = icmp ugt i8 %x, 23
2342   %b = icmp sge i8 %x, 17
2343   %c = and i1 %a, %b
2344   ret i1 %c
2347 ; x >u 23 && x >s 17
2349 define i1 @and_ugt_sgt_swap(i8 %x) {
2350 ; CHECK-LABEL: @and_ugt_sgt_swap(
2351 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2352 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2353 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2354 ; CHECK-NEXT:    ret i1 [[C]]
2356   %a = icmp ugt i8 %x, 23
2357   %b = icmp sgt i8 %x, 17
2358   %c = and i1 %a, %b
2359   ret i1 %c
2362 ; x >u 23 && x <=s 17
2364 define i1 @and_ugt_sle_swap(i8 %x) {
2365 ; CHECK-LABEL: @and_ugt_sle_swap(
2366 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2367 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2368 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2369 ; CHECK-NEXT:    ret i1 [[C]]
2371   %a = icmp ugt i8 %x, 23
2372   %b = icmp sle i8 %x, 17
2373   %c = and i1 %a, %b
2374   ret i1 %c
2377 ; x >u 23 && x <s 17
2379 define i1 @and_ugt_slt_swap(i8 %x) {
2380 ; CHECK-LABEL: @and_ugt_slt_swap(
2381 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2382 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2383 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2384 ; CHECK-NEXT:    ret i1 [[C]]
2386   %a = icmp ugt i8 %x, 23
2387   %b = icmp slt i8 %x, 17
2388   %c = and i1 %a, %b
2389   ret i1 %c
2392 ; x >u 23 && x >=u 17
2394 define i1 @and_ugt_uge_swap(i8 %x) {
2395 ; CHECK-LABEL: @and_ugt_uge_swap(
2396 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2397 ; CHECK-NEXT:    ret i1 [[A]]
2399   %a = icmp ugt i8 %x, 23
2400   %b = icmp uge i8 %x, 17
2401   %c = and i1 %a, %b
2402   ret i1 %c
2405 ; x >u 23 && x >u 17
2407 define i1 @and_ugt_ugt_swap(i8 %x) {
2408 ; CHECK-LABEL: @and_ugt_ugt_swap(
2409 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
2410 ; CHECK-NEXT:    ret i1 [[A]]
2412   %a = icmp ugt i8 %x, 23
2413   %b = icmp ugt i8 %x, 17
2414   %c = and i1 %a, %b
2415   ret i1 %c
2418 ; x >u 23 && x <=u 17
2420 define i1 @and_ugt_ule_swap(i8 %x) {
2421 ; CHECK-LABEL: @and_ugt_ule_swap(
2422 ; CHECK-NEXT:    ret i1 false
2424   %a = icmp ugt i8 %x, 23
2425   %b = icmp ule i8 %x, 17
2426   %c = and i1 %a, %b
2427   ret i1 %c
2430 ; x >u 23 && x <u 17
2432 define i1 @and_ugt_ult_swap(i8 %x) {
2433 ; CHECK-LABEL: @and_ugt_ult_swap(
2434 ; CHECK-NEXT:    ret i1 false
2436   %a = icmp ugt i8 %x, 23
2437   %b = icmp ult i8 %x, 17
2438   %c = and i1 %a, %b
2439   ret i1 %c
2442 ; ule
2443 ; x <=u 23 && x == 17
2445 define i1 @and_ule_eq_swap(i8 %x) {
2446 ; CHECK-LABEL: @and_ule_eq_swap(
2447 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
2448 ; CHECK-NEXT:    ret i1 [[B]]
2450   %a = icmp ule i8 %x, 23
2451   %b = icmp eq i8 %x, 17
2452   %c = and i1 %a, %b
2453   ret i1 %c
2456 ; x <=u 23 && x != 17
2458 define i1 @and_ule_ne_swap(i8 %x) {
2459 ; CHECK-LABEL: @and_ule_ne_swap(
2460 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2461 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
2462 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2463 ; CHECK-NEXT:    ret i1 [[C]]
2465   %a = icmp ule i8 %x, 23
2466   %b = icmp ne i8 %x, 17
2467   %c = and i1 %a, %b
2468   ret i1 %c
2471 ; x <=u 23 && x >=s 17
2473 define i1 @and_ule_sge_swap(i8 %x) {
2474 ; CHECK-LABEL: @and_ule_sge_swap(
2475 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2476 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2477 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2478 ; CHECK-NEXT:    ret i1 [[C]]
2480   %a = icmp ule i8 %x, 23
2481   %b = icmp sge i8 %x, 17
2482   %c = and i1 %a, %b
2483   ret i1 %c
2486 ; x <=u 23 && x >s 17
2488 define i1 @and_ule_sgt_swap(i8 %x) {
2489 ; CHECK-LABEL: @and_ule_sgt_swap(
2490 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2491 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2492 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2493 ; CHECK-NEXT:    ret i1 [[C]]
2495   %a = icmp ule i8 %x, 23
2496   %b = icmp sgt i8 %x, 17
2497   %c = and i1 %a, %b
2498   ret i1 %c
2501 ; x <=u 23 && x <=s 17
2503 define i1 @and_ule_sle_swap(i8 %x) {
2504 ; CHECK-LABEL: @and_ule_sle_swap(
2505 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2506 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2507 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2508 ; CHECK-NEXT:    ret i1 [[C]]
2510   %a = icmp ule i8 %x, 23
2511   %b = icmp sle i8 %x, 17
2512   %c = and i1 %a, %b
2513   ret i1 %c
2516 ; x <=u 23 && x <s 17
2518 define i1 @and_ule_slt_swap(i8 %x) {
2519 ; CHECK-LABEL: @and_ule_slt_swap(
2520 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2521 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2522 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2523 ; CHECK-NEXT:    ret i1 [[C]]
2525   %a = icmp ule i8 %x, 23
2526   %b = icmp slt i8 %x, 17
2527   %c = and i1 %a, %b
2528   ret i1 %c
2531 ; x <=u 23 && x >=u 17
2533 define i1 @and_ule_uge_swap(i8 %x) {
2534 ; CHECK-LABEL: @and_ule_uge_swap(
2535 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2536 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
2537 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2538 ; CHECK-NEXT:    ret i1 [[C]]
2540   %a = icmp ule i8 %x, 23
2541   %b = icmp uge i8 %x, 17
2542   %c = and i1 %a, %b
2543   ret i1 %c
2546 ; x <=u 23 && x >u 17
2548 define i1 @and_ule_ugt_swap(i8 %x) {
2549 ; CHECK-LABEL: @and_ule_ugt_swap(
2550 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
2551 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
2552 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2553 ; CHECK-NEXT:    ret i1 [[C]]
2555   %a = icmp ule i8 %x, 23
2556   %b = icmp ugt i8 %x, 17
2557   %c = and i1 %a, %b
2558   ret i1 %c
2561 ; x <=u 23 && x <=u 17
2563 define i1 @and_ule_ule_swap(i8 %x) {
2564 ; CHECK-LABEL: @and_ule_ule_swap(
2565 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
2566 ; CHECK-NEXT:    ret i1 [[B]]
2568   %a = icmp ule i8 %x, 23
2569   %b = icmp ule i8 %x, 17
2570   %c = and i1 %a, %b
2571   ret i1 %c
2574 ; x <=u 23 && x <u 17
2576 define i1 @and_ule_ult_swap(i8 %x) {
2577 ; CHECK-LABEL: @and_ule_ult_swap(
2578 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
2579 ; CHECK-NEXT:    ret i1 [[B]]
2581   %a = icmp ule i8 %x, 23
2582   %b = icmp ult i8 %x, 17
2583   %c = and i1 %a, %b
2584   ret i1 %c
2587 ; ult
2588 ; x <u 23 && x == 17
2590 define i1 @and_ult_eq_swap(i8 %x) {
2591 ; CHECK-LABEL: @and_ult_eq_swap(
2592 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
2593 ; CHECK-NEXT:    ret i1 [[B]]
2595   %a = icmp ult i8 %x, 23
2596   %b = icmp eq i8 %x, 17
2597   %c = and i1 %a, %b
2598   ret i1 %c
2601 ; x <u 23 && x != 17
2603 define i1 @and_ult_ne_swap(i8 %x) {
2604 ; CHECK-LABEL: @and_ult_ne_swap(
2605 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2606 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
2607 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2608 ; CHECK-NEXT:    ret i1 [[C]]
2610   %a = icmp ult i8 %x, 23
2611   %b = icmp ne i8 %x, 17
2612   %c = and i1 %a, %b
2613   ret i1 %c
2616 ; x <u 23 && x >=s 17
2618 define i1 @and_ult_sge_swap(i8 %x) {
2619 ; CHECK-LABEL: @and_ult_sge_swap(
2620 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2621 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2622 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2623 ; CHECK-NEXT:    ret i1 [[C]]
2625   %a = icmp ult i8 %x, 23
2626   %b = icmp sge i8 %x, 17
2627   %c = and i1 %a, %b
2628   ret i1 %c
2631 ; x <u 23 && x >s 17
2633 define i1 @and_ult_sgt_swap(i8 %x) {
2634 ; CHECK-LABEL: @and_ult_sgt_swap(
2635 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2636 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2637 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2638 ; CHECK-NEXT:    ret i1 [[C]]
2640   %a = icmp ult i8 %x, 23
2641   %b = icmp sgt i8 %x, 17
2642   %c = and i1 %a, %b
2643   ret i1 %c
2646 ; x <u 23 && x <=s 17
2648 define i1 @and_ult_sle_swap(i8 %x) {
2649 ; CHECK-LABEL: @and_ult_sle_swap(
2650 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2651 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2652 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2653 ; CHECK-NEXT:    ret i1 [[C]]
2655   %a = icmp ult i8 %x, 23
2656   %b = icmp sle i8 %x, 17
2657   %c = and i1 %a, %b
2658   ret i1 %c
2661 ; x <u 23 && x <s 17
2663 define i1 @and_ult_slt_swap(i8 %x) {
2664 ; CHECK-LABEL: @and_ult_slt_swap(
2665 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2666 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2667 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2668 ; CHECK-NEXT:    ret i1 [[C]]
2670   %a = icmp ult i8 %x, 23
2671   %b = icmp slt i8 %x, 17
2672   %c = and i1 %a, %b
2673   ret i1 %c
2676 ; x <u 23 && x >=u 17
2678 define i1 @and_ult_uge_swap(i8 %x) {
2679 ; CHECK-LABEL: @and_ult_uge_swap(
2680 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2681 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
2682 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2683 ; CHECK-NEXT:    ret i1 [[C]]
2685   %a = icmp ult i8 %x, 23
2686   %b = icmp uge i8 %x, 17
2687   %c = and i1 %a, %b
2688   ret i1 %c
2691 ; x <u 23 && x >u 17
2693 define i1 @and_ult_ugt_swap(i8 %x) {
2694 ; CHECK-LABEL: @and_ult_ugt_swap(
2695 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
2696 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
2697 ; CHECK-NEXT:    [[C:%.*]] = and i1 [[A]], [[B]]
2698 ; CHECK-NEXT:    ret i1 [[C]]
2700   %a = icmp ult i8 %x, 23
2701   %b = icmp ugt i8 %x, 17
2702   %c = and i1 %a, %b
2703   ret i1 %c
2706 ; x <u 23 && x <=u 17
2708 define i1 @and_ult_ule_swap(i8 %x) {
2709 ; CHECK-LABEL: @and_ult_ule_swap(
2710 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
2711 ; CHECK-NEXT:    ret i1 [[B]]
2713   %a = icmp ult i8 %x, 23
2714   %b = icmp ule i8 %x, 17
2715   %c = and i1 %a, %b
2716   ret i1 %c
2719 ; x <u 23 && x <u 17
2721 define i1 @and_ult_ult_swap(i8 %x) {
2722 ; CHECK-LABEL: @and_ult_ult_swap(
2723 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
2724 ; CHECK-NEXT:    ret i1 [[B]]
2726   %a = icmp ult i8 %x, 23
2727   %b = icmp ult i8 %x, 17
2728   %c = and i1 %a, %b
2729   ret i1 %c
2732 ; eq
2733 ; x == 13 || x == 17
2735 define i1 @or_eq_eq(i8 %x) {
2736 ; CHECK-LABEL: @or_eq_eq(
2737 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
2738 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
2739 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2740 ; CHECK-NEXT:    ret i1 [[C]]
2742   %a = icmp eq i8 %x, 13
2743   %b = icmp eq i8 %x, 17
2744   %c = or i1 %a, %b
2745   ret i1 %c
2748 ; x == 13 || x != 17
2750 define i1 @or_eq_ne(i8 %x) {
2751 ; CHECK-LABEL: @or_eq_ne(
2752 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
2753 ; CHECK-NEXT:    ret i1 [[B]]
2755   %a = icmp eq i8 %x, 13
2756   %b = icmp ne i8 %x, 17
2757   %c = or i1 %a, %b
2758   ret i1 %c
2761 ; x == 13 || x >=s 17
2763 define i1 @or_eq_sge(i8 %x) {
2764 ; CHECK-LABEL: @or_eq_sge(
2765 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
2766 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
2767 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2768 ; CHECK-NEXT:    ret i1 [[C]]
2770   %a = icmp eq i8 %x, 13
2771   %b = icmp sge i8 %x, 17
2772   %c = or i1 %a, %b
2773   ret i1 %c
2776 ; x == 13 || x >s 17
2778 define i1 @or_eq_sgt(i8 %x) {
2779 ; CHECK-LABEL: @or_eq_sgt(
2780 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
2781 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
2782 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2783 ; CHECK-NEXT:    ret i1 [[C]]
2785   %a = icmp eq i8 %x, 13
2786   %b = icmp sgt i8 %x, 17
2787   %c = or i1 %a, %b
2788   ret i1 %c
2791 ; x == 13 || x <=s 17
2793 define i1 @or_eq_sle(i8 %x) {
2794 ; CHECK-LABEL: @or_eq_sle(
2795 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
2796 ; CHECK-NEXT:    ret i1 [[B]]
2798   %a = icmp eq i8 %x, 13
2799   %b = icmp sle i8 %x, 17
2800   %c = or i1 %a, %b
2801   ret i1 %c
2804 ; x == 13 || x <s 17
2806 define i1 @or_eq_slt(i8 %x) {
2807 ; CHECK-LABEL: @or_eq_slt(
2808 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
2809 ; CHECK-NEXT:    ret i1 [[B]]
2811   %a = icmp eq i8 %x, 13
2812   %b = icmp slt i8 %x, 17
2813   %c = or i1 %a, %b
2814   ret i1 %c
2817 ; x == 13 || x >=u 17
2819 define i1 @or_eq_uge(i8 %x) {
2820 ; CHECK-LABEL: @or_eq_uge(
2821 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
2822 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
2823 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2824 ; CHECK-NEXT:    ret i1 [[C]]
2826   %a = icmp eq i8 %x, 13
2827   %b = icmp uge i8 %x, 17
2828   %c = or i1 %a, %b
2829   ret i1 %c
2832 ; x == 13 || x >u 17
2834 define i1 @or_eq_ugt(i8 %x) {
2835 ; CHECK-LABEL: @or_eq_ugt(
2836 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 13
2837 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
2838 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
2839 ; CHECK-NEXT:    ret i1 [[C]]
2841   %a = icmp eq i8 %x, 13
2842   %b = icmp ugt i8 %x, 17
2843   %c = or i1 %a, %b
2844   ret i1 %c
2847 ; x == 13 || x <=u 17
2849 define i1 @or_eq_ule(i8 %x) {
2850 ; CHECK-LABEL: @or_eq_ule(
2851 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
2852 ; CHECK-NEXT:    ret i1 [[B]]
2854   %a = icmp eq i8 %x, 13
2855   %b = icmp ule i8 %x, 17
2856   %c = or i1 %a, %b
2857   ret i1 %c
2860 ; x == 13 || x <u 17
2862 define i1 @or_eq_ult(i8 %x) {
2863 ; CHECK-LABEL: @or_eq_ult(
2864 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
2865 ; CHECK-NEXT:    ret i1 [[B]]
2867   %a = icmp eq i8 %x, 13
2868   %b = icmp ult i8 %x, 17
2869   %c = or i1 %a, %b
2870   ret i1 %c
2873 ; ne
2874 ; x != 13 || x == 17
2876 define i1 @or_ne_eq(i8 %x) {
2877 ; CHECK-LABEL: @or_ne_eq(
2878 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
2879 ; CHECK-NEXT:    ret i1 [[A]]
2881   %a = icmp ne i8 %x, 13
2882   %b = icmp eq i8 %x, 17
2883   %c = or i1 %a, %b
2884   ret i1 %c
2887 ; x != 13 || x != 17
2889 define i1 @or_ne_ne(i8 %x) {
2890 ; CHECK-LABEL: @or_ne_ne(
2891 ; CHECK-NEXT:    ret i1 true
2893   %a = icmp ne i8 %x, 13
2894   %b = icmp ne i8 %x, 17
2895   %c = or i1 %a, %b
2896   ret i1 %c
2899 ; x != 13 || x >=s 17
2901 define i1 @or_ne_sge(i8 %x) {
2902 ; CHECK-LABEL: @or_ne_sge(
2903 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
2904 ; CHECK-NEXT:    ret i1 [[A]]
2906   %a = icmp ne i8 %x, 13
2907   %b = icmp sge i8 %x, 17
2908   %c = or i1 %a, %b
2909   ret i1 %c
2912 ; x != 13 || x >s 17
2914 define i1 @or_ne_sgt(i8 %x) {
2915 ; CHECK-LABEL: @or_ne_sgt(
2916 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
2917 ; CHECK-NEXT:    ret i1 [[A]]
2919   %a = icmp ne i8 %x, 13
2920   %b = icmp sgt i8 %x, 17
2921   %c = or i1 %a, %b
2922   ret i1 %c
2925 ; x != 13 || x <=s 17
2927 define i1 @or_ne_sle(i8 %x) {
2928 ; CHECK-LABEL: @or_ne_sle(
2929 ; CHECK-NEXT:    ret i1 true
2931   %a = icmp ne i8 %x, 13
2932   %b = icmp sle i8 %x, 17
2933   %c = or i1 %a, %b
2934   ret i1 %c
2937 ; x != 13 || x <s 17
2939 define i1 @or_ne_slt(i8 %x) {
2940 ; CHECK-LABEL: @or_ne_slt(
2941 ; CHECK-NEXT:    ret i1 true
2943   %a = icmp ne i8 %x, 13
2944   %b = icmp slt i8 %x, 17
2945   %c = or i1 %a, %b
2946   ret i1 %c
2949 ; x != 13 || x >=u 17
2951 define i1 @or_ne_uge(i8 %x) {
2952 ; CHECK-LABEL: @or_ne_uge(
2953 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
2954 ; CHECK-NEXT:    ret i1 [[A]]
2956   %a = icmp ne i8 %x, 13
2957   %b = icmp uge i8 %x, 17
2958   %c = or i1 %a, %b
2959   ret i1 %c
2962 ; x != 13 || x >u 17
2964 define i1 @or_ne_ugt(i8 %x) {
2965 ; CHECK-LABEL: @or_ne_ugt(
2966 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 13
2967 ; CHECK-NEXT:    ret i1 [[A]]
2969   %a = icmp ne i8 %x, 13
2970   %b = icmp ugt i8 %x, 17
2971   %c = or i1 %a, %b
2972   ret i1 %c
2975 ; x != 13 || x <=u 17
2977 define i1 @or_ne_ule(i8 %x) {
2978 ; CHECK-LABEL: @or_ne_ule(
2979 ; CHECK-NEXT:    ret i1 true
2981   %a = icmp ne i8 %x, 13
2982   %b = icmp ule i8 %x, 17
2983   %c = or i1 %a, %b
2984   ret i1 %c
2987 ; x != 13 || x <u 17
2989 define i1 @or_ne_ult(i8 %x) {
2990 ; CHECK-LABEL: @or_ne_ult(
2991 ; CHECK-NEXT:    ret i1 true
2993   %a = icmp ne i8 %x, 13
2994   %b = icmp ult i8 %x, 17
2995   %c = or i1 %a, %b
2996   ret i1 %c
2999 ; sge
3000 ; x >=s 13 || x == 17
3002 define i1 @or_sge_eq(i8 %x) {
3003 ; CHECK-LABEL: @or_sge_eq(
3004 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3005 ; CHECK-NEXT:    ret i1 [[A]]
3007   %a = icmp sge i8 %x, 13
3008   %b = icmp eq i8 %x, 17
3009   %c = or i1 %a, %b
3010   ret i1 %c
3013 ; x >=s 13 || x != 17
3015 define i1 @or_sge_ne(i8 %x) {
3016 ; CHECK-LABEL: @or_sge_ne(
3017 ; CHECK-NEXT:    ret i1 true
3019   %a = icmp sge i8 %x, 13
3020   %b = icmp ne i8 %x, 17
3021   %c = or i1 %a, %b
3022   ret i1 %c
3025 ; x >=s 13 || x >=s 17
3027 define i1 @or_sge_sge(i8 %x) {
3028 ; CHECK-LABEL: @or_sge_sge(
3029 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3030 ; CHECK-NEXT:    ret i1 [[A]]
3032   %a = icmp sge i8 %x, 13
3033   %b = icmp sge i8 %x, 17
3034   %c = or i1 %a, %b
3035   ret i1 %c
3038 ; x >=s 13 || x >s 17
3040 define i1 @or_sge_sgt(i8 %x) {
3041 ; CHECK-LABEL: @or_sge_sgt(
3042 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3043 ; CHECK-NEXT:    ret i1 [[A]]
3045   %a = icmp sge i8 %x, 13
3046   %b = icmp sgt i8 %x, 17
3047   %c = or i1 %a, %b
3048   ret i1 %c
3051 ; x >=s 13 || x <=s 17
3053 define i1 @or_sge_sle(i8 %x) {
3054 ; CHECK-LABEL: @or_sge_sle(
3055 ; CHECK-NEXT:    ret i1 true
3057   %a = icmp sge i8 %x, 13
3058   %b = icmp sle i8 %x, 17
3059   %c = or i1 %a, %b
3060   ret i1 %c
3063 ; x >=s 13 || x <s 17
3065 define i1 @or_sge_slt(i8 %x) {
3066 ; CHECK-LABEL: @or_sge_slt(
3067 ; CHECK-NEXT:    ret i1 true
3069   %a = icmp sge i8 %x, 13
3070   %b = icmp slt i8 %x, 17
3071   %c = or i1 %a, %b
3072   ret i1 %c
3075 ; x >=s 13 || x >=u 17
3077 define i1 @or_sge_uge(i8 %x) {
3078 ; CHECK-LABEL: @or_sge_uge(
3079 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3080 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
3081 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3082 ; CHECK-NEXT:    ret i1 [[C]]
3084   %a = icmp sge i8 %x, 13
3085   %b = icmp uge i8 %x, 17
3086   %c = or i1 %a, %b
3087   ret i1 %c
3090 ; x >=s 13 || x >u 17
3092 define i1 @or_sge_ugt(i8 %x) {
3093 ; CHECK-LABEL: @or_sge_ugt(
3094 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3095 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
3096 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3097 ; CHECK-NEXT:    ret i1 [[C]]
3099   %a = icmp sge i8 %x, 13
3100   %b = icmp ugt i8 %x, 17
3101   %c = or i1 %a, %b
3102   ret i1 %c
3105 ; x >=s 13 || x <=u 17
3107 define i1 @or_sge_ule(i8 %x) {
3108 ; CHECK-LABEL: @or_sge_ule(
3109 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3110 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
3111 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3112 ; CHECK-NEXT:    ret i1 [[C]]
3114   %a = icmp sge i8 %x, 13
3115   %b = icmp ule i8 %x, 17
3116   %c = or i1 %a, %b
3117   ret i1 %c
3120 ; x >=s 13 || x <u 17
3122 define i1 @or_sge_ult(i8 %x) {
3123 ; CHECK-LABEL: @or_sge_ult(
3124 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 13
3125 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
3126 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3127 ; CHECK-NEXT:    ret i1 [[C]]
3129   %a = icmp sge i8 %x, 13
3130   %b = icmp ult i8 %x, 17
3131   %c = or i1 %a, %b
3132   ret i1 %c
3135 ; sgt
3136 ; x >s 13 || x == 17
3138 define i1 @or_sgt_eq(i8 %x) {
3139 ; CHECK-LABEL: @or_sgt_eq(
3140 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3141 ; CHECK-NEXT:    ret i1 [[A]]
3143   %a = icmp sgt i8 %x, 13
3144   %b = icmp eq i8 %x, 17
3145   %c = or i1 %a, %b
3146   ret i1 %c
3149 ; x >s 13 || x != 17
3151 define i1 @or_sgt_ne(i8 %x) {
3152 ; CHECK-LABEL: @or_sgt_ne(
3153 ; CHECK-NEXT:    ret i1 true
3155   %a = icmp sgt i8 %x, 13
3156   %b = icmp ne i8 %x, 17
3157   %c = or i1 %a, %b
3158   ret i1 %c
3161 ; x >s 13 || x >=s 17
3163 define i1 @or_sgt_sge(i8 %x) {
3164 ; CHECK-LABEL: @or_sgt_sge(
3165 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3166 ; CHECK-NEXT:    ret i1 [[A]]
3168   %a = icmp sgt i8 %x, 13
3169   %b = icmp sge i8 %x, 17
3170   %c = or i1 %a, %b
3171   ret i1 %c
3174 ; x >s 13 || x >s 17
3176 define i1 @or_sgt_sgt(i8 %x) {
3177 ; CHECK-LABEL: @or_sgt_sgt(
3178 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3179 ; CHECK-NEXT:    ret i1 [[A]]
3181   %a = icmp sgt i8 %x, 13
3182   %b = icmp sgt i8 %x, 17
3183   %c = or i1 %a, %b
3184   ret i1 %c
3187 ; x >s 13 || x <=s 17
3189 define i1 @or_sgt_sle(i8 %x) {
3190 ; CHECK-LABEL: @or_sgt_sle(
3191 ; CHECK-NEXT:    ret i1 true
3193   %a = icmp sgt i8 %x, 13
3194   %b = icmp sle i8 %x, 17
3195   %c = or i1 %a, %b
3196   ret i1 %c
3199 ; x >s 13 || x <s 17
3201 define i1 @or_sgt_slt(i8 %x) {
3202 ; CHECK-LABEL: @or_sgt_slt(
3203 ; CHECK-NEXT:    ret i1 true
3205   %a = icmp sgt i8 %x, 13
3206   %b = icmp slt i8 %x, 17
3207   %c = or i1 %a, %b
3208   ret i1 %c
3211 ; x >s 13 || x >=u 17
3213 define i1 @or_sgt_uge(i8 %x) {
3214 ; CHECK-LABEL: @or_sgt_uge(
3215 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3216 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
3217 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3218 ; CHECK-NEXT:    ret i1 [[C]]
3220   %a = icmp sgt i8 %x, 13
3221   %b = icmp uge i8 %x, 17
3222   %c = or i1 %a, %b
3223   ret i1 %c
3226 ; x >s 13 || x >u 17
3228 define i1 @or_sgt_ugt(i8 %x) {
3229 ; CHECK-LABEL: @or_sgt_ugt(
3230 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3231 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
3232 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3233 ; CHECK-NEXT:    ret i1 [[C]]
3235   %a = icmp sgt i8 %x, 13
3236   %b = icmp ugt i8 %x, 17
3237   %c = or i1 %a, %b
3238   ret i1 %c
3241 ; x >s 13 || x <=u 17
3243 define i1 @or_sgt_ule(i8 %x) {
3244 ; CHECK-LABEL: @or_sgt_ule(
3245 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3246 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
3247 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3248 ; CHECK-NEXT:    ret i1 [[C]]
3250   %a = icmp sgt i8 %x, 13
3251   %b = icmp ule i8 %x, 17
3252   %c = or i1 %a, %b
3253   ret i1 %c
3256 ; x >s 13 || x <u 17
3258 define i1 @or_sgt_ult(i8 %x) {
3259 ; CHECK-LABEL: @or_sgt_ult(
3260 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 13
3261 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
3262 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3263 ; CHECK-NEXT:    ret i1 [[C]]
3265   %a = icmp sgt i8 %x, 13
3266   %b = icmp ult i8 %x, 17
3267   %c = or i1 %a, %b
3268   ret i1 %c
3271 ; sle
3272 ; x <=s 13 || x == 17
3274 define i1 @or_sle_eq(i8 %x) {
3275 ; CHECK-LABEL: @or_sle_eq(
3276 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3277 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
3278 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3279 ; CHECK-NEXT:    ret i1 [[C]]
3281   %a = icmp sle i8 %x, 13
3282   %b = icmp eq i8 %x, 17
3283   %c = or i1 %a, %b
3284   ret i1 %c
3287 ; x <=s 13 || x != 17
3289 define i1 @or_sle_ne(i8 %x) {
3290 ; CHECK-LABEL: @or_sle_ne(
3291 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
3292 ; CHECK-NEXT:    ret i1 [[B]]
3294   %a = icmp sle i8 %x, 13
3295   %b = icmp ne i8 %x, 17
3296   %c = or i1 %a, %b
3297   ret i1 %c
3300 ; x <=s 13 || x >=s 17
3302 define i1 @or_sle_sge(i8 %x) {
3303 ; CHECK-LABEL: @or_sle_sge(
3304 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3305 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
3306 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3307 ; CHECK-NEXT:    ret i1 [[C]]
3309   %a = icmp sle i8 %x, 13
3310   %b = icmp sge i8 %x, 17
3311   %c = or i1 %a, %b
3312   ret i1 %c
3315 ; x <=s 13 || x >s 17
3317 define i1 @or_sle_sgt(i8 %x) {
3318 ; CHECK-LABEL: @or_sle_sgt(
3319 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3320 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
3321 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3322 ; CHECK-NEXT:    ret i1 [[C]]
3324   %a = icmp sle i8 %x, 13
3325   %b = icmp sgt i8 %x, 17
3326   %c = or i1 %a, %b
3327   ret i1 %c
3330 ; x <=s 13 || x <=s 17
3332 define i1 @or_sle_sle(i8 %x) {
3333 ; CHECK-LABEL: @or_sle_sle(
3334 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
3335 ; CHECK-NEXT:    ret i1 [[B]]
3337   %a = icmp sle i8 %x, 13
3338   %b = icmp sle i8 %x, 17
3339   %c = or i1 %a, %b
3340   ret i1 %c
3343 ; x <=s 13 || x <s 17
3345 define i1 @or_sle_slt(i8 %x) {
3346 ; CHECK-LABEL: @or_sle_slt(
3347 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
3348 ; CHECK-NEXT:    ret i1 [[B]]
3350   %a = icmp sle i8 %x, 13
3351   %b = icmp slt i8 %x, 17
3352   %c = or i1 %a, %b
3353   ret i1 %c
3356 ; x <=s 13 || x >=u 17
3358 define i1 @or_sle_uge(i8 %x) {
3359 ; CHECK-LABEL: @or_sle_uge(
3360 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3361 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
3362 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3363 ; CHECK-NEXT:    ret i1 [[C]]
3365   %a = icmp sle i8 %x, 13
3366   %b = icmp uge i8 %x, 17
3367   %c = or i1 %a, %b
3368   ret i1 %c
3371 ; x <=s 13 || x >u 17
3373 define i1 @or_sle_ugt(i8 %x) {
3374 ; CHECK-LABEL: @or_sle_ugt(
3375 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3376 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
3377 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3378 ; CHECK-NEXT:    ret i1 [[C]]
3380   %a = icmp sle i8 %x, 13
3381   %b = icmp ugt i8 %x, 17
3382   %c = or i1 %a, %b
3383   ret i1 %c
3386 ; x <=s 13 || x <=u 17
3388 define i1 @or_sle_ule(i8 %x) {
3389 ; CHECK-LABEL: @or_sle_ule(
3390 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3391 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
3392 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3393 ; CHECK-NEXT:    ret i1 [[C]]
3395   %a = icmp sle i8 %x, 13
3396   %b = icmp ule i8 %x, 17
3397   %c = or i1 %a, %b
3398   ret i1 %c
3401 ; x <=s 13 || x <u 17
3403 define i1 @or_sle_ult(i8 %x) {
3404 ; CHECK-LABEL: @or_sle_ult(
3405 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 13
3406 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
3407 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3408 ; CHECK-NEXT:    ret i1 [[C]]
3410   %a = icmp sle i8 %x, 13
3411   %b = icmp ult i8 %x, 17
3412   %c = or i1 %a, %b
3413   ret i1 %c
3416 ; slt
3417 ; x <s 13 || x == 17
3419 define i1 @or_slt_eq(i8 %x) {
3420 ; CHECK-LABEL: @or_slt_eq(
3421 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3422 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
3423 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3424 ; CHECK-NEXT:    ret i1 [[C]]
3426   %a = icmp slt i8 %x, 13
3427   %b = icmp eq i8 %x, 17
3428   %c = or i1 %a, %b
3429   ret i1 %c
3432 ; x <s 13 || x != 17
3434 define i1 @or_slt_ne(i8 %x) {
3435 ; CHECK-LABEL: @or_slt_ne(
3436 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
3437 ; CHECK-NEXT:    ret i1 [[B]]
3439   %a = icmp slt i8 %x, 13
3440   %b = icmp ne i8 %x, 17
3441   %c = or i1 %a, %b
3442   ret i1 %c
3445 ; x <s 13 || x >=s 17
3447 define i1 @or_slt_sge(i8 %x) {
3448 ; CHECK-LABEL: @or_slt_sge(
3449 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3450 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
3451 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3452 ; CHECK-NEXT:    ret i1 [[C]]
3454   %a = icmp slt i8 %x, 13
3455   %b = icmp sge i8 %x, 17
3456   %c = or i1 %a, %b
3457   ret i1 %c
3460 ; x <s 13 || x >s 17
3462 define i1 @or_slt_sgt(i8 %x) {
3463 ; CHECK-LABEL: @or_slt_sgt(
3464 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3465 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
3466 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3467 ; CHECK-NEXT:    ret i1 [[C]]
3469   %a = icmp slt i8 %x, 13
3470   %b = icmp sgt i8 %x, 17
3471   %c = or i1 %a, %b
3472   ret i1 %c
3475 ; x <s 13 || x <=s 17
3477 define i1 @or_slt_sle(i8 %x) {
3478 ; CHECK-LABEL: @or_slt_sle(
3479 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
3480 ; CHECK-NEXT:    ret i1 [[B]]
3482   %a = icmp slt i8 %x, 13
3483   %b = icmp sle i8 %x, 17
3484   %c = or i1 %a, %b
3485   ret i1 %c
3488 ; x <s 13 || x <s 17
3490 define i1 @or_slt_slt(i8 %x) {
3491 ; CHECK-LABEL: @or_slt_slt(
3492 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
3493 ; CHECK-NEXT:    ret i1 [[B]]
3495   %a = icmp slt i8 %x, 13
3496   %b = icmp slt i8 %x, 17
3497   %c = or i1 %a, %b
3498   ret i1 %c
3501 ; x <s 13 || x >=u 17
3503 define i1 @or_slt_uge(i8 %x) {
3504 ; CHECK-LABEL: @or_slt_uge(
3505 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3506 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
3507 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3508 ; CHECK-NEXT:    ret i1 [[C]]
3510   %a = icmp slt i8 %x, 13
3511   %b = icmp uge i8 %x, 17
3512   %c = or i1 %a, %b
3513   ret i1 %c
3516 ; x <s 13 || x >u 17
3518 define i1 @or_slt_ugt(i8 %x) {
3519 ; CHECK-LABEL: @or_slt_ugt(
3520 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3521 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
3522 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3523 ; CHECK-NEXT:    ret i1 [[C]]
3525   %a = icmp slt i8 %x, 13
3526   %b = icmp ugt i8 %x, 17
3527   %c = or i1 %a, %b
3528   ret i1 %c
3531 ; x <s 13 || x <=u 17
3533 define i1 @or_slt_ule(i8 %x) {
3534 ; CHECK-LABEL: @or_slt_ule(
3535 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3536 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
3537 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3538 ; CHECK-NEXT:    ret i1 [[C]]
3540   %a = icmp slt i8 %x, 13
3541   %b = icmp ule i8 %x, 17
3542   %c = or i1 %a, %b
3543   ret i1 %c
3546 ; x <s 13 || x <u 17
3548 define i1 @or_slt_ult(i8 %x) {
3549 ; CHECK-LABEL: @or_slt_ult(
3550 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 13
3551 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
3552 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3553 ; CHECK-NEXT:    ret i1 [[C]]
3555   %a = icmp slt i8 %x, 13
3556   %b = icmp ult i8 %x, 17
3557   %c = or i1 %a, %b
3558   ret i1 %c
3561 ; uge
3562 ; x >=u 13 || x == 17
3564 define i1 @or_uge_eq(i8 %x) {
3565 ; CHECK-LABEL: @or_uge_eq(
3566 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
3567 ; CHECK-NEXT:    ret i1 [[A]]
3569   %a = icmp uge i8 %x, 13
3570   %b = icmp eq i8 %x, 17
3571   %c = or i1 %a, %b
3572   ret i1 %c
3575 ; x >=u 13 || x != 17
3577 define i1 @or_uge_ne(i8 %x) {
3578 ; CHECK-LABEL: @or_uge_ne(
3579 ; CHECK-NEXT:    ret i1 true
3581   %a = icmp uge i8 %x, 13
3582   %b = icmp ne i8 %x, 17
3583   %c = or i1 %a, %b
3584   ret i1 %c
3587 ; x >=u 13 || x >=s 17
3589 define i1 @or_uge_sge(i8 %x) {
3590 ; CHECK-LABEL: @or_uge_sge(
3591 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
3592 ; CHECK-NEXT:    ret i1 [[A]]
3594   %a = icmp uge i8 %x, 13
3595   %b = icmp sge i8 %x, 17
3596   %c = or i1 %a, %b
3597   ret i1 %c
3600 ; x >=u 13 || x >s 17
3602 define i1 @or_uge_sgt(i8 %x) {
3603 ; CHECK-LABEL: @or_uge_sgt(
3604 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
3605 ; CHECK-NEXT:    ret i1 [[A]]
3607   %a = icmp uge i8 %x, 13
3608   %b = icmp sgt i8 %x, 17
3609   %c = or i1 %a, %b
3610   ret i1 %c
3613 ; x >=u 13 || x <=s 17
3615 define i1 @or_uge_sle(i8 %x) {
3616 ; CHECK-LABEL: @or_uge_sle(
3617 ; CHECK-NEXT:    ret i1 true
3619   %a = icmp uge i8 %x, 13
3620   %b = icmp sle i8 %x, 17
3621   %c = or i1 %a, %b
3622   ret i1 %c
3625 ; x >=u 13 || x <s 17
3627 define i1 @or_uge_slt(i8 %x) {
3628 ; CHECK-LABEL: @or_uge_slt(
3629 ; CHECK-NEXT:    ret i1 true
3631   %a = icmp uge i8 %x, 13
3632   %b = icmp slt i8 %x, 17
3633   %c = or i1 %a, %b
3634   ret i1 %c
3637 ; x >=u 13 || x >=u 17
3639 define i1 @or_uge_uge(i8 %x) {
3640 ; CHECK-LABEL: @or_uge_uge(
3641 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
3642 ; CHECK-NEXT:    ret i1 [[A]]
3644   %a = icmp uge i8 %x, 13
3645   %b = icmp uge i8 %x, 17
3646   %c = or i1 %a, %b
3647   ret i1 %c
3650 ; x >=u 13 || x >u 17
3652 define i1 @or_uge_ugt(i8 %x) {
3653 ; CHECK-LABEL: @or_uge_ugt(
3654 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 13
3655 ; CHECK-NEXT:    ret i1 [[A]]
3657   %a = icmp uge i8 %x, 13
3658   %b = icmp ugt i8 %x, 17
3659   %c = or i1 %a, %b
3660   ret i1 %c
3663 ; x >=u 13 || x <=u 17
3665 define i1 @or_uge_ule(i8 %x) {
3666 ; CHECK-LABEL: @or_uge_ule(
3667 ; CHECK-NEXT:    ret i1 true
3669   %a = icmp uge i8 %x, 13
3670   %b = icmp ule i8 %x, 17
3671   %c = or i1 %a, %b
3672   ret i1 %c
3675 ; x >=u 13 || x <u 17
3677 define i1 @or_uge_ult(i8 %x) {
3678 ; CHECK-LABEL: @or_uge_ult(
3679 ; CHECK-NEXT:    ret i1 true
3681   %a = icmp uge i8 %x, 13
3682   %b = icmp ult i8 %x, 17
3683   %c = or i1 %a, %b
3684   ret i1 %c
3687 ; ugt
3688 ; x >u 13 || x == 17
3690 define i1 @or_ugt_eq(i8 %x) {
3691 ; CHECK-LABEL: @or_ugt_eq(
3692 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
3693 ; CHECK-NEXT:    ret i1 [[A]]
3695   %a = icmp ugt i8 %x, 13
3696   %b = icmp eq i8 %x, 17
3697   %c = or i1 %a, %b
3698   ret i1 %c
3701 ; x >u 13 || x != 17
3703 define i1 @or_ugt_ne(i8 %x) {
3704 ; CHECK-LABEL: @or_ugt_ne(
3705 ; CHECK-NEXT:    ret i1 true
3707   %a = icmp ugt i8 %x, 13
3708   %b = icmp ne i8 %x, 17
3709   %c = or i1 %a, %b
3710   ret i1 %c
3713 ; x >u 13 || x >=s 17
3715 define i1 @or_ugt_sge(i8 %x) {
3716 ; CHECK-LABEL: @or_ugt_sge(
3717 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
3718 ; CHECK-NEXT:    ret i1 [[A]]
3720   %a = icmp ugt i8 %x, 13
3721   %b = icmp sge i8 %x, 17
3722   %c = or i1 %a, %b
3723   ret i1 %c
3726 ; x >u 13 || x >s 17
3728 define i1 @or_ugt_sgt(i8 %x) {
3729 ; CHECK-LABEL: @or_ugt_sgt(
3730 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
3731 ; CHECK-NEXT:    ret i1 [[A]]
3733   %a = icmp ugt i8 %x, 13
3734   %b = icmp sgt i8 %x, 17
3735   %c = or i1 %a, %b
3736   ret i1 %c
3739 ; x >u 13 || x <=s 17
3741 define i1 @or_ugt_sle(i8 %x) {
3742 ; CHECK-LABEL: @or_ugt_sle(
3743 ; CHECK-NEXT:    ret i1 true
3745   %a = icmp ugt i8 %x, 13
3746   %b = icmp sle i8 %x, 17
3747   %c = or i1 %a, %b
3748   ret i1 %c
3751 ; x >u 13 || x <s 17
3753 define i1 @or_ugt_slt(i8 %x) {
3754 ; CHECK-LABEL: @or_ugt_slt(
3755 ; CHECK-NEXT:    ret i1 true
3757   %a = icmp ugt i8 %x, 13
3758   %b = icmp slt i8 %x, 17
3759   %c = or i1 %a, %b
3760   ret i1 %c
3763 ; x >u 13 || x >=u 17
3765 define i1 @or_ugt_uge(i8 %x) {
3766 ; CHECK-LABEL: @or_ugt_uge(
3767 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
3768 ; CHECK-NEXT:    ret i1 [[A]]
3770   %a = icmp ugt i8 %x, 13
3771   %b = icmp uge i8 %x, 17
3772   %c = or i1 %a, %b
3773   ret i1 %c
3776 ; x >u 13 || x >u 17
3778 define i1 @or_ugt_ugt(i8 %x) {
3779 ; CHECK-LABEL: @or_ugt_ugt(
3780 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 13
3781 ; CHECK-NEXT:    ret i1 [[A]]
3783   %a = icmp ugt i8 %x, 13
3784   %b = icmp ugt i8 %x, 17
3785   %c = or i1 %a, %b
3786   ret i1 %c
3789 ; x >u 13 || x <=u 17
3791 define i1 @or_ugt_ule(i8 %x) {
3792 ; CHECK-LABEL: @or_ugt_ule(
3793 ; CHECK-NEXT:    ret i1 true
3795   %a = icmp ugt i8 %x, 13
3796   %b = icmp ule i8 %x, 17
3797   %c = or i1 %a, %b
3798   ret i1 %c
3801 ; x >u 13 || x <u 17
3803 define i1 @or_ugt_ult(i8 %x) {
3804 ; CHECK-LABEL: @or_ugt_ult(
3805 ; CHECK-NEXT:    ret i1 true
3807   %a = icmp ugt i8 %x, 13
3808   %b = icmp ult i8 %x, 17
3809   %c = or i1 %a, %b
3810   ret i1 %c
3813 ; ule
3814 ; x <=u 13 || x == 17
3816 define i1 @or_ule_eq(i8 %x) {
3817 ; CHECK-LABEL: @or_ule_eq(
3818 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
3819 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
3820 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3821 ; CHECK-NEXT:    ret i1 [[C]]
3823   %a = icmp ule i8 %x, 13
3824   %b = icmp eq i8 %x, 17
3825   %c = or i1 %a, %b
3826   ret i1 %c
3829 ; x <=u 13 || x != 17
3831 define i1 @or_ule_ne(i8 %x) {
3832 ; CHECK-LABEL: @or_ule_ne(
3833 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
3834 ; CHECK-NEXT:    ret i1 [[B]]
3836   %a = icmp ule i8 %x, 13
3837   %b = icmp ne i8 %x, 17
3838   %c = or i1 %a, %b
3839   ret i1 %c
3842 ; x <=u 13 || x >=s 17
3844 define i1 @or_ule_sge(i8 %x) {
3845 ; CHECK-LABEL: @or_ule_sge(
3846 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
3847 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
3848 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3849 ; CHECK-NEXT:    ret i1 [[C]]
3851   %a = icmp ule i8 %x, 13
3852   %b = icmp sge i8 %x, 17
3853   %c = or i1 %a, %b
3854   ret i1 %c
3857 ; x <=u 13 || x >s 17
3859 define i1 @or_ule_sgt(i8 %x) {
3860 ; CHECK-LABEL: @or_ule_sgt(
3861 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
3862 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
3863 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3864 ; CHECK-NEXT:    ret i1 [[C]]
3866   %a = icmp ule i8 %x, 13
3867   %b = icmp sgt i8 %x, 17
3868   %c = or i1 %a, %b
3869   ret i1 %c
3872 ; x <=u 13 || x <=s 17
3874 define i1 @or_ule_sle(i8 %x) {
3875 ; CHECK-LABEL: @or_ule_sle(
3876 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
3877 ; CHECK-NEXT:    ret i1 [[B]]
3879   %a = icmp ule i8 %x, 13
3880   %b = icmp sle i8 %x, 17
3881   %c = or i1 %a, %b
3882   ret i1 %c
3885 ; x <=u 13 || x <s 17
3887 define i1 @or_ule_slt(i8 %x) {
3888 ; CHECK-LABEL: @or_ule_slt(
3889 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
3890 ; CHECK-NEXT:    ret i1 [[B]]
3892   %a = icmp ule i8 %x, 13
3893   %b = icmp slt i8 %x, 17
3894   %c = or i1 %a, %b
3895   ret i1 %c
3898 ; x <=u 13 || x >=u 17
3900 define i1 @or_ule_uge(i8 %x) {
3901 ; CHECK-LABEL: @or_ule_uge(
3902 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
3903 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
3904 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3905 ; CHECK-NEXT:    ret i1 [[C]]
3907   %a = icmp ule i8 %x, 13
3908   %b = icmp uge i8 %x, 17
3909   %c = or i1 %a, %b
3910   ret i1 %c
3913 ; x <=u 13 || x >u 17
3915 define i1 @or_ule_ugt(i8 %x) {
3916 ; CHECK-LABEL: @or_ule_ugt(
3917 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 13
3918 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
3919 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3920 ; CHECK-NEXT:    ret i1 [[C]]
3922   %a = icmp ule i8 %x, 13
3923   %b = icmp ugt i8 %x, 17
3924   %c = or i1 %a, %b
3925   ret i1 %c
3928 ; x <=u 13 || x <=u 17
3930 define i1 @or_ule_ule(i8 %x) {
3931 ; CHECK-LABEL: @or_ule_ule(
3932 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
3933 ; CHECK-NEXT:    ret i1 [[B]]
3935   %a = icmp ule i8 %x, 13
3936   %b = icmp ule i8 %x, 17
3937   %c = or i1 %a, %b
3938   ret i1 %c
3941 ; x <=u 13 || x <u 17
3943 define i1 @or_ule_ult(i8 %x) {
3944 ; CHECK-LABEL: @or_ule_ult(
3945 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
3946 ; CHECK-NEXT:    ret i1 [[B]]
3948   %a = icmp ule i8 %x, 13
3949   %b = icmp ult i8 %x, 17
3950   %c = or i1 %a, %b
3951   ret i1 %c
3954 ; ult
3955 ; x <u 13 || x == 17
3957 define i1 @or_ult_eq(i8 %x) {
3958 ; CHECK-LABEL: @or_ult_eq(
3959 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
3960 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
3961 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3962 ; CHECK-NEXT:    ret i1 [[C]]
3964   %a = icmp ult i8 %x, 13
3965   %b = icmp eq i8 %x, 17
3966   %c = or i1 %a, %b
3967   ret i1 %c
3970 ; x <u 13 || x != 17
3972 define i1 @or_ult_ne(i8 %x) {
3973 ; CHECK-LABEL: @or_ult_ne(
3974 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
3975 ; CHECK-NEXT:    ret i1 [[B]]
3977   %a = icmp ult i8 %x, 13
3978   %b = icmp ne i8 %x, 17
3979   %c = or i1 %a, %b
3980   ret i1 %c
3983 ; x <u 13 || x >=s 17
3985 define i1 @or_ult_sge(i8 %x) {
3986 ; CHECK-LABEL: @or_ult_sge(
3987 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
3988 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
3989 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
3990 ; CHECK-NEXT:    ret i1 [[C]]
3992   %a = icmp ult i8 %x, 13
3993   %b = icmp sge i8 %x, 17
3994   %c = or i1 %a, %b
3995   ret i1 %c
3998 ; x <u 13 || x >s 17
4000 define i1 @or_ult_sgt(i8 %x) {
4001 ; CHECK-LABEL: @or_ult_sgt(
4002 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
4003 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
4004 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4005 ; CHECK-NEXT:    ret i1 [[C]]
4007   %a = icmp ult i8 %x, 13
4008   %b = icmp sgt i8 %x, 17
4009   %c = or i1 %a, %b
4010   ret i1 %c
4013 ; x <u 13 || x <=s 17
4015 define i1 @or_ult_sle(i8 %x) {
4016 ; CHECK-LABEL: @or_ult_sle(
4017 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
4018 ; CHECK-NEXT:    ret i1 [[B]]
4020   %a = icmp ult i8 %x, 13
4021   %b = icmp sle i8 %x, 17
4022   %c = or i1 %a, %b
4023   ret i1 %c
4026 ; x <u 13 || x <s 17
4028 define i1 @or_ult_slt(i8 %x) {
4029 ; CHECK-LABEL: @or_ult_slt(
4030 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
4031 ; CHECK-NEXT:    ret i1 [[B]]
4033   %a = icmp ult i8 %x, 13
4034   %b = icmp slt i8 %x, 17
4035   %c = or i1 %a, %b
4036   ret i1 %c
4039 ; x <u 13 || x >=u 17
4041 define i1 @or_ult_uge(i8 %x) {
4042 ; CHECK-LABEL: @or_ult_uge(
4043 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
4044 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
4045 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4046 ; CHECK-NEXT:    ret i1 [[C]]
4048   %a = icmp ult i8 %x, 13
4049   %b = icmp uge i8 %x, 17
4050   %c = or i1 %a, %b
4051   ret i1 %c
4054 ; x <u 13 || x >u 17
4056 define i1 @or_ult_ugt(i8 %x) {
4057 ; CHECK-LABEL: @or_ult_ugt(
4058 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 13
4059 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
4060 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4061 ; CHECK-NEXT:    ret i1 [[C]]
4063   %a = icmp ult i8 %x, 13
4064   %b = icmp ugt i8 %x, 17
4065   %c = or i1 %a, %b
4066   ret i1 %c
4069 ; x <u 13 || x <=u 17
4071 define i1 @or_ult_ule(i8 %x) {
4072 ; CHECK-LABEL: @or_ult_ule(
4073 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
4074 ; CHECK-NEXT:    ret i1 [[B]]
4076   %a = icmp ult i8 %x, 13
4077   %b = icmp ule i8 %x, 17
4078   %c = or i1 %a, %b
4079   ret i1 %c
4082 ; x <u 13 || x <u 17
4084 define i1 @or_ult_ult(i8 %x) {
4085 ; CHECK-LABEL: @or_ult_ult(
4086 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
4087 ; CHECK-NEXT:    ret i1 [[B]]
4089   %a = icmp ult i8 %x, 13
4090   %b = icmp ult i8 %x, 17
4091   %c = or i1 %a, %b
4092   ret i1 %c
4095 ; eq
4096 ; x == 23 || x == 17
4098 define i1 @or_eq_eq_swap(i8 %x) {
4099 ; CHECK-LABEL: @or_eq_eq_swap(
4100 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
4101 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
4102 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4103 ; CHECK-NEXT:    ret i1 [[C]]
4105   %a = icmp eq i8 %x, 23
4106   %b = icmp eq i8 %x, 17
4107   %c = or i1 %a, %b
4108   ret i1 %c
4111 ; x == 23 || x != 17
4113 define i1 @or_eq_ne_swap(i8 %x) {
4114 ; CHECK-LABEL: @or_eq_ne_swap(
4115 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
4116 ; CHECK-NEXT:    ret i1 [[B]]
4118   %a = icmp eq i8 %x, 23
4119   %b = icmp ne i8 %x, 17
4120   %c = or i1 %a, %b
4121   ret i1 %c
4124 ; x == 23 || x >=s 17
4126 define i1 @or_eq_sge_swap(i8 %x) {
4127 ; CHECK-LABEL: @or_eq_sge_swap(
4128 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
4129 ; CHECK-NEXT:    ret i1 [[B]]
4131   %a = icmp eq i8 %x, 23
4132   %b = icmp sge i8 %x, 17
4133   %c = or i1 %a, %b
4134   ret i1 %c
4137 ; x == 23 || x >s 17
4139 define i1 @or_eq_sgt_swap(i8 %x) {
4140 ; CHECK-LABEL: @or_eq_sgt_swap(
4141 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
4142 ; CHECK-NEXT:    ret i1 [[B]]
4144   %a = icmp eq i8 %x, 23
4145   %b = icmp sgt i8 %x, 17
4146   %c = or i1 %a, %b
4147   ret i1 %c
4150 ; x == 23 || x <=s 17
4152 define i1 @or_eq_sle_swap(i8 %x) {
4153 ; CHECK-LABEL: @or_eq_sle_swap(
4154 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
4155 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
4156 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4157 ; CHECK-NEXT:    ret i1 [[C]]
4159   %a = icmp eq i8 %x, 23
4160   %b = icmp sle i8 %x, 17
4161   %c = or i1 %a, %b
4162   ret i1 %c
4165 ; x == 23 || x <s 17
4167 define i1 @or_eq_slt_swap(i8 %x) {
4168 ; CHECK-LABEL: @or_eq_slt_swap(
4169 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
4170 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
4171 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4172 ; CHECK-NEXT:    ret i1 [[C]]
4174   %a = icmp eq i8 %x, 23
4175   %b = icmp slt i8 %x, 17
4176   %c = or i1 %a, %b
4177   ret i1 %c
4180 ; x == 23 || x >=u 17
4182 define i1 @or_eq_uge_swap(i8 %x) {
4183 ; CHECK-LABEL: @or_eq_uge_swap(
4184 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
4185 ; CHECK-NEXT:    ret i1 [[B]]
4187   %a = icmp eq i8 %x, 23
4188   %b = icmp uge i8 %x, 17
4189   %c = or i1 %a, %b
4190   ret i1 %c
4193 ; x == 23 || x >u 17
4195 define i1 @or_eq_ugt_swap(i8 %x) {
4196 ; CHECK-LABEL: @or_eq_ugt_swap(
4197 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
4198 ; CHECK-NEXT:    ret i1 [[B]]
4200   %a = icmp eq i8 %x, 23
4201   %b = icmp ugt i8 %x, 17
4202   %c = or i1 %a, %b
4203   ret i1 %c
4206 ; x == 23 || x <=u 17
4208 define i1 @or_eq_ule_swap(i8 %x) {
4209 ; CHECK-LABEL: @or_eq_ule_swap(
4210 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
4211 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
4212 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4213 ; CHECK-NEXT:    ret i1 [[C]]
4215   %a = icmp eq i8 %x, 23
4216   %b = icmp ule i8 %x, 17
4217   %c = or i1 %a, %b
4218   ret i1 %c
4221 ; x == 23 || x <u 17
4223 define i1 @or_eq_ult_swap(i8 %x) {
4224 ; CHECK-LABEL: @or_eq_ult_swap(
4225 ; CHECK-NEXT:    [[A:%.*]] = icmp eq i8 %x, 23
4226 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
4227 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4228 ; CHECK-NEXT:    ret i1 [[C]]
4230   %a = icmp eq i8 %x, 23
4231   %b = icmp ult i8 %x, 17
4232   %c = or i1 %a, %b
4233   ret i1 %c
4236 ; ne
4237 ; x != 23 || x == 17
4239 define i1 @or_ne_eq_swap(i8 %x) {
4240 ; CHECK-LABEL: @or_ne_eq_swap(
4241 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
4242 ; CHECK-NEXT:    ret i1 [[A]]
4244   %a = icmp ne i8 %x, 23
4245   %b = icmp eq i8 %x, 17
4246   %c = or i1 %a, %b
4247   ret i1 %c
4250 ; x != 23 || x != 17
4252 define i1 @or_ne_ne_swap(i8 %x) {
4253 ; CHECK-LABEL: @or_ne_ne_swap(
4254 ; CHECK-NEXT:    ret i1 true
4256   %a = icmp ne i8 %x, 23
4257   %b = icmp ne i8 %x, 17
4258   %c = or i1 %a, %b
4259   ret i1 %c
4262 ; x != 23 || x >=s 17
4264 define i1 @or_ne_sge_swap(i8 %x) {
4265 ; CHECK-LABEL: @or_ne_sge_swap(
4266 ; CHECK-NEXT:    ret i1 true
4268   %a = icmp ne i8 %x, 23
4269   %b = icmp sge i8 %x, 17
4270   %c = or i1 %a, %b
4271   ret i1 %c
4274 ; x != 23 || x >s 17
4276 define i1 @or_ne_sgt_swap(i8 %x) {
4277 ; CHECK-LABEL: @or_ne_sgt_swap(
4278 ; CHECK-NEXT:    ret i1 true
4280   %a = icmp ne i8 %x, 23
4281   %b = icmp sgt i8 %x, 17
4282   %c = or i1 %a, %b
4283   ret i1 %c
4286 ; x != 23 || x <=s 17
4288 define i1 @or_ne_sle_swap(i8 %x) {
4289 ; CHECK-LABEL: @or_ne_sle_swap(
4290 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
4291 ; CHECK-NEXT:    ret i1 [[A]]
4293   %a = icmp ne i8 %x, 23
4294   %b = icmp sle i8 %x, 17
4295   %c = or i1 %a, %b
4296   ret i1 %c
4299 ; x != 23 || x <s 17
4301 define i1 @or_ne_slt_swap(i8 %x) {
4302 ; CHECK-LABEL: @or_ne_slt_swap(
4303 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
4304 ; CHECK-NEXT:    ret i1 [[A]]
4306   %a = icmp ne i8 %x, 23
4307   %b = icmp slt i8 %x, 17
4308   %c = or i1 %a, %b
4309   ret i1 %c
4312 ; x != 23 || x >=u 17
4314 define i1 @or_ne_uge_swap(i8 %x) {
4315 ; CHECK-LABEL: @or_ne_uge_swap(
4316 ; CHECK-NEXT:    ret i1 true
4318   %a = icmp ne i8 %x, 23
4319   %b = icmp uge i8 %x, 17
4320   %c = or i1 %a, %b
4321   ret i1 %c
4324 ; x != 23 || x >u 17
4326 define i1 @or_ne_ugt_swap(i8 %x) {
4327 ; CHECK-LABEL: @or_ne_ugt_swap(
4328 ; CHECK-NEXT:    ret i1 true
4330   %a = icmp ne i8 %x, 23
4331   %b = icmp ugt i8 %x, 17
4332   %c = or i1 %a, %b
4333   ret i1 %c
4336 ; x != 23 || x <=u 17
4338 define i1 @or_ne_ule_swap(i8 %x) {
4339 ; CHECK-LABEL: @or_ne_ule_swap(
4340 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
4341 ; CHECK-NEXT:    ret i1 [[A]]
4343   %a = icmp ne i8 %x, 23
4344   %b = icmp ule i8 %x, 17
4345   %c = or i1 %a, %b
4346   ret i1 %c
4349 ; x != 23 || x <u 17
4351 define i1 @or_ne_ult_swap(i8 %x) {
4352 ; CHECK-LABEL: @or_ne_ult_swap(
4353 ; CHECK-NEXT:    [[A:%.*]] = icmp ne i8 %x, 23
4354 ; CHECK-NEXT:    ret i1 [[A]]
4356   %a = icmp ne i8 %x, 23
4357   %b = icmp ult i8 %x, 17
4358   %c = or i1 %a, %b
4359   ret i1 %c
4362 ; sge
4363 ; x >=s 23 || x == 17
4365 define i1 @or_sge_eq_swap(i8 %x) {
4366 ; CHECK-LABEL: @or_sge_eq_swap(
4367 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
4368 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
4369 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4370 ; CHECK-NEXT:    ret i1 [[C]]
4372   %a = icmp sge i8 %x, 23
4373   %b = icmp eq i8 %x, 17
4374   %c = or i1 %a, %b
4375   ret i1 %c
4378 ; x >=s 23 || x != 17
4380 define i1 @or_sge_ne_swap(i8 %x) {
4381 ; CHECK-LABEL: @or_sge_ne_swap(
4382 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
4383 ; CHECK-NEXT:    ret i1 [[B]]
4385   %a = icmp sge i8 %x, 23
4386   %b = icmp ne i8 %x, 17
4387   %c = or i1 %a, %b
4388   ret i1 %c
4391 ; x >=s 23 || x >=s 17
4393 define i1 @or_sge_sge_swap(i8 %x) {
4394 ; CHECK-LABEL: @or_sge_sge_swap(
4395 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
4396 ; CHECK-NEXT:    ret i1 [[B]]
4398   %a = icmp sge i8 %x, 23
4399   %b = icmp sge i8 %x, 17
4400   %c = or i1 %a, %b
4401   ret i1 %c
4404 ; x >=s 23 || x >s 17
4406 define i1 @or_sge_sgt_swap(i8 %x) {
4407 ; CHECK-LABEL: @or_sge_sgt_swap(
4408 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
4409 ; CHECK-NEXT:    ret i1 [[B]]
4411   %a = icmp sge i8 %x, 23
4412   %b = icmp sgt i8 %x, 17
4413   %c = or i1 %a, %b
4414   ret i1 %c
4417 ; x >=s 23 || x <=s 17
4419 define i1 @or_sge_sle_swap(i8 %x) {
4420 ; CHECK-LABEL: @or_sge_sle_swap(
4421 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
4422 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
4423 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4424 ; CHECK-NEXT:    ret i1 [[C]]
4426   %a = icmp sge i8 %x, 23
4427   %b = icmp sle i8 %x, 17
4428   %c = or i1 %a, %b
4429   ret i1 %c
4432 ; x >=s 23 || x <s 17
4434 define i1 @or_sge_slt_swap(i8 %x) {
4435 ; CHECK-LABEL: @or_sge_slt_swap(
4436 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
4437 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
4438 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4439 ; CHECK-NEXT:    ret i1 [[C]]
4441   %a = icmp sge i8 %x, 23
4442   %b = icmp slt i8 %x, 17
4443   %c = or i1 %a, %b
4444   ret i1 %c
4447 ; x >=s 23 || x >=u 17
4449 define i1 @or_sge_uge_swap(i8 %x) {
4450 ; CHECK-LABEL: @or_sge_uge_swap(
4451 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
4452 ; CHECK-NEXT:    ret i1 [[B]]
4454   %a = icmp sge i8 %x, 23
4455   %b = icmp uge i8 %x, 17
4456   %c = or i1 %a, %b
4457   ret i1 %c
4460 ; x >=s 23 || x >u 17
4462 define i1 @or_sge_ugt_swap(i8 %x) {
4463 ; CHECK-LABEL: @or_sge_ugt_swap(
4464 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
4465 ; CHECK-NEXT:    ret i1 [[B]]
4467   %a = icmp sge i8 %x, 23
4468   %b = icmp ugt i8 %x, 17
4469   %c = or i1 %a, %b
4470   ret i1 %c
4473 ; x >=s 23 || x <=u 17
4475 define i1 @or_sge_ule_swap(i8 %x) {
4476 ; CHECK-LABEL: @or_sge_ule_swap(
4477 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
4478 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
4479 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4480 ; CHECK-NEXT:    ret i1 [[C]]
4482   %a = icmp sge i8 %x, 23
4483   %b = icmp ule i8 %x, 17
4484   %c = or i1 %a, %b
4485   ret i1 %c
4488 ; x >=s 23 || x <u 17
4490 define i1 @or_sge_ult_swap(i8 %x) {
4491 ; CHECK-LABEL: @or_sge_ult_swap(
4492 ; CHECK-NEXT:    [[A:%.*]] = icmp sge i8 %x, 23
4493 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
4494 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4495 ; CHECK-NEXT:    ret i1 [[C]]
4497   %a = icmp sge i8 %x, 23
4498   %b = icmp ult i8 %x, 17
4499   %c = or i1 %a, %b
4500   ret i1 %c
4503 ; sgt
4504 ; x >s 23 || x == 17
4506 define i1 @or_sgt_eq_swap(i8 %x) {
4507 ; CHECK-LABEL: @or_sgt_eq_swap(
4508 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
4509 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
4510 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4511 ; CHECK-NEXT:    ret i1 [[C]]
4513   %a = icmp sgt i8 %x, 23
4514   %b = icmp eq i8 %x, 17
4515   %c = or i1 %a, %b
4516   ret i1 %c
4519 ; x >s 23 || x != 17
4521 define i1 @or_sgt_ne_swap(i8 %x) {
4522 ; CHECK-LABEL: @or_sgt_ne_swap(
4523 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
4524 ; CHECK-NEXT:    ret i1 [[B]]
4526   %a = icmp sgt i8 %x, 23
4527   %b = icmp ne i8 %x, 17
4528   %c = or i1 %a, %b
4529   ret i1 %c
4532 ; x >s 23 || x >=s 17
4534 define i1 @or_sgt_sge_swap(i8 %x) {
4535 ; CHECK-LABEL: @or_sgt_sge_swap(
4536 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
4537 ; CHECK-NEXT:    ret i1 [[B]]
4539   %a = icmp sgt i8 %x, 23
4540   %b = icmp sge i8 %x, 17
4541   %c = or i1 %a, %b
4542   ret i1 %c
4545 ; x >s 23 || x >s 17
4547 define i1 @or_sgt_sgt_swap(i8 %x) {
4548 ; CHECK-LABEL: @or_sgt_sgt_swap(
4549 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
4550 ; CHECK-NEXT:    ret i1 [[B]]
4552   %a = icmp sgt i8 %x, 23
4553   %b = icmp sgt i8 %x, 17
4554   %c = or i1 %a, %b
4555   ret i1 %c
4558 ; x >s 23 || x <=s 17
4560 define i1 @or_sgt_sle_swap(i8 %x) {
4561 ; CHECK-LABEL: @or_sgt_sle_swap(
4562 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
4563 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
4564 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4565 ; CHECK-NEXT:    ret i1 [[C]]
4567   %a = icmp sgt i8 %x, 23
4568   %b = icmp sle i8 %x, 17
4569   %c = or i1 %a, %b
4570   ret i1 %c
4573 ; x >s 23 || x <s 17
4575 define i1 @or_sgt_slt_swap(i8 %x) {
4576 ; CHECK-LABEL: @or_sgt_slt_swap(
4577 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
4578 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
4579 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4580 ; CHECK-NEXT:    ret i1 [[C]]
4582   %a = icmp sgt i8 %x, 23
4583   %b = icmp slt i8 %x, 17
4584   %c = or i1 %a, %b
4585   ret i1 %c
4588 ; x >s 23 || x >=u 17
4590 define i1 @or_sgt_uge_swap(i8 %x) {
4591 ; CHECK-LABEL: @or_sgt_uge_swap(
4592 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
4593 ; CHECK-NEXT:    ret i1 [[B]]
4595   %a = icmp sgt i8 %x, 23
4596   %b = icmp uge i8 %x, 17
4597   %c = or i1 %a, %b
4598   ret i1 %c
4601 ; x >s 23 || x >u 17
4603 define i1 @or_sgt_ugt_swap(i8 %x) {
4604 ; CHECK-LABEL: @or_sgt_ugt_swap(
4605 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
4606 ; CHECK-NEXT:    ret i1 [[B]]
4608   %a = icmp sgt i8 %x, 23
4609   %b = icmp ugt i8 %x, 17
4610   %c = or i1 %a, %b
4611   ret i1 %c
4614 ; x >s 23 || x <=u 17
4616 define i1 @or_sgt_ule_swap(i8 %x) {
4617 ; CHECK-LABEL: @or_sgt_ule_swap(
4618 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
4619 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
4620 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4621 ; CHECK-NEXT:    ret i1 [[C]]
4623   %a = icmp sgt i8 %x, 23
4624   %b = icmp ule i8 %x, 17
4625   %c = or i1 %a, %b
4626   ret i1 %c
4629 ; x >s 23 || x <u 17
4631 define i1 @or_sgt_ult_swap(i8 %x) {
4632 ; CHECK-LABEL: @or_sgt_ult_swap(
4633 ; CHECK-NEXT:    [[A:%.*]] = icmp sgt i8 %x, 23
4634 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
4635 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4636 ; CHECK-NEXT:    ret i1 [[C]]
4638   %a = icmp sgt i8 %x, 23
4639   %b = icmp ult i8 %x, 17
4640   %c = or i1 %a, %b
4641   ret i1 %c
4644 ; sle
4645 ; x <=s 23 || x == 17
4647 define i1 @or_sle_eq_swap(i8 %x) {
4648 ; CHECK-LABEL: @or_sle_eq_swap(
4649 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
4650 ; CHECK-NEXT:    ret i1 [[A]]
4652   %a = icmp sle i8 %x, 23
4653   %b = icmp eq i8 %x, 17
4654   %c = or i1 %a, %b
4655   ret i1 %c
4658 ; x <=s 23 || x != 17
4660 define i1 @or_sle_ne_swap(i8 %x) {
4661 ; CHECK-LABEL: @or_sle_ne_swap(
4662 ; CHECK-NEXT:    ret i1 true
4664   %a = icmp sle i8 %x, 23
4665   %b = icmp ne i8 %x, 17
4666   %c = or i1 %a, %b
4667   ret i1 %c
4670 ; x <=s 23 || x >=s 17
4672 define i1 @or_sle_sge_swap(i8 %x) {
4673 ; CHECK-LABEL: @or_sle_sge_swap(
4674 ; CHECK-NEXT:    ret i1 true
4676   %a = icmp sle i8 %x, 23
4677   %b = icmp sge i8 %x, 17
4678   %c = or i1 %a, %b
4679   ret i1 %c
4682 ; x <=s 23 || x >s 17
4684 define i1 @or_sle_sgt_swap(i8 %x) {
4685 ; CHECK-LABEL: @or_sle_sgt_swap(
4686 ; CHECK-NEXT:    ret i1 true
4688   %a = icmp sle i8 %x, 23
4689   %b = icmp sgt i8 %x, 17
4690   %c = or i1 %a, %b
4691   ret i1 %c
4694 ; x <=s 23 || x <=s 17
4696 define i1 @or_sle_sle_swap(i8 %x) {
4697 ; CHECK-LABEL: @or_sle_sle_swap(
4698 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
4699 ; CHECK-NEXT:    ret i1 [[A]]
4701   %a = icmp sle i8 %x, 23
4702   %b = icmp sle i8 %x, 17
4703   %c = or i1 %a, %b
4704   ret i1 %c
4707 ; x <=s 23 || x <s 17
4709 define i1 @or_sle_slt_swap(i8 %x) {
4710 ; CHECK-LABEL: @or_sle_slt_swap(
4711 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
4712 ; CHECK-NEXT:    ret i1 [[A]]
4714   %a = icmp sle i8 %x, 23
4715   %b = icmp slt i8 %x, 17
4716   %c = or i1 %a, %b
4717   ret i1 %c
4720 ; x <=s 23 || x >=u 17
4722 define i1 @or_sle_uge_swap(i8 %x) {
4723 ; CHECK-LABEL: @or_sle_uge_swap(
4724 ; CHECK-NEXT:    ret i1 true
4726   %a = icmp sle i8 %x, 23
4727   %b = icmp uge i8 %x, 17
4728   %c = or i1 %a, %b
4729   ret i1 %c
4732 ; x <=s 23 || x >u 17
4734 define i1 @or_sle_ugt_swap(i8 %x) {
4735 ; CHECK-LABEL: @or_sle_ugt_swap(
4736 ; CHECK-NEXT:    ret i1 true
4738   %a = icmp sle i8 %x, 23
4739   %b = icmp ugt i8 %x, 17
4740   %c = or i1 %a, %b
4741   ret i1 %c
4744 ; x <=s 23 || x <=u 17
4746 define i1 @or_sle_ule_swap(i8 %x) {
4747 ; CHECK-LABEL: @or_sle_ule_swap(
4748 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
4749 ; CHECK-NEXT:    ret i1 [[A]]
4751   %a = icmp sle i8 %x, 23
4752   %b = icmp ule i8 %x, 17
4753   %c = or i1 %a, %b
4754   ret i1 %c
4757 ; x <=s 23 || x <u 17
4759 define i1 @or_sle_ult_swap(i8 %x) {
4760 ; CHECK-LABEL: @or_sle_ult_swap(
4761 ; CHECK-NEXT:    [[A:%.*]] = icmp sle i8 %x, 23
4762 ; CHECK-NEXT:    ret i1 [[A]]
4764   %a = icmp sle i8 %x, 23
4765   %b = icmp ult i8 %x, 17
4766   %c = or i1 %a, %b
4767   ret i1 %c
4770 ; slt
4771 ; x <s 23 || x == 17
4773 define i1 @or_slt_eq_swap(i8 %x) {
4774 ; CHECK-LABEL: @or_slt_eq_swap(
4775 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
4776 ; CHECK-NEXT:    ret i1 [[A]]
4778   %a = icmp slt i8 %x, 23
4779   %b = icmp eq i8 %x, 17
4780   %c = or i1 %a, %b
4781   ret i1 %c
4784 ; x <s 23 || x != 17
4786 define i1 @or_slt_ne_swap(i8 %x) {
4787 ; CHECK-LABEL: @or_slt_ne_swap(
4788 ; CHECK-NEXT:    ret i1 true
4790   %a = icmp slt i8 %x, 23
4791   %b = icmp ne i8 %x, 17
4792   %c = or i1 %a, %b
4793   ret i1 %c
4796 ; x <s 23 || x >=s 17
4798 define i1 @or_slt_sge_swap(i8 %x) {
4799 ; CHECK-LABEL: @or_slt_sge_swap(
4800 ; CHECK-NEXT:    ret i1 true
4802   %a = icmp slt i8 %x, 23
4803   %b = icmp sge i8 %x, 17
4804   %c = or i1 %a, %b
4805   ret i1 %c
4808 ; x <s 23 || x >s 17
4810 define i1 @or_slt_sgt_swap(i8 %x) {
4811 ; CHECK-LABEL: @or_slt_sgt_swap(
4812 ; CHECK-NEXT:    ret i1 true
4814   %a = icmp slt i8 %x, 23
4815   %b = icmp sgt i8 %x, 17
4816   %c = or i1 %a, %b
4817   ret i1 %c
4820 ; x <s 23 || x <=s 17
4822 define i1 @or_slt_sle_swap(i8 %x) {
4823 ; CHECK-LABEL: @or_slt_sle_swap(
4824 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
4825 ; CHECK-NEXT:    ret i1 [[A]]
4827   %a = icmp slt i8 %x, 23
4828   %b = icmp sle i8 %x, 17
4829   %c = or i1 %a, %b
4830   ret i1 %c
4833 ; x <s 23 || x <s 17
4835 define i1 @or_slt_slt_swap(i8 %x) {
4836 ; CHECK-LABEL: @or_slt_slt_swap(
4837 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
4838 ; CHECK-NEXT:    ret i1 [[A]]
4840   %a = icmp slt i8 %x, 23
4841   %b = icmp slt i8 %x, 17
4842   %c = or i1 %a, %b
4843   ret i1 %c
4846 ; x <s 23 || x >=u 17
4848 define i1 @or_slt_uge_swap(i8 %x) {
4849 ; CHECK-LABEL: @or_slt_uge_swap(
4850 ; CHECK-NEXT:    ret i1 true
4852   %a = icmp slt i8 %x, 23
4853   %b = icmp uge i8 %x, 17
4854   %c = or i1 %a, %b
4855   ret i1 %c
4858 ; x <s 23 || x >u 17
4860 define i1 @or_slt_ugt_swap(i8 %x) {
4861 ; CHECK-LABEL: @or_slt_ugt_swap(
4862 ; CHECK-NEXT:    ret i1 true
4864   %a = icmp slt i8 %x, 23
4865   %b = icmp ugt i8 %x, 17
4866   %c = or i1 %a, %b
4867   ret i1 %c
4870 ; x <s 23 || x <=u 17
4872 define i1 @or_slt_ule_swap(i8 %x) {
4873 ; CHECK-LABEL: @or_slt_ule_swap(
4874 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
4875 ; CHECK-NEXT:    ret i1 [[A]]
4877   %a = icmp slt i8 %x, 23
4878   %b = icmp ule i8 %x, 17
4879   %c = or i1 %a, %b
4880   ret i1 %c
4883 ; x <s 23 || x <u 17
4885 define i1 @or_slt_ult_swap(i8 %x) {
4886 ; CHECK-LABEL: @or_slt_ult_swap(
4887 ; CHECK-NEXT:    [[A:%.*]] = icmp slt i8 %x, 23
4888 ; CHECK-NEXT:    ret i1 [[A]]
4890   %a = icmp slt i8 %x, 23
4891   %b = icmp ult i8 %x, 17
4892   %c = or i1 %a, %b
4893   ret i1 %c
4896 ; uge
4897 ; x >=u 23 || x == 17
4899 define i1 @or_uge_eq_swap(i8 %x) {
4900 ; CHECK-LABEL: @or_uge_eq_swap(
4901 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
4902 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
4903 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4904 ; CHECK-NEXT:    ret i1 [[C]]
4906   %a = icmp uge i8 %x, 23
4907   %b = icmp eq i8 %x, 17
4908   %c = or i1 %a, %b
4909   ret i1 %c
4912 ; x >=u 23 || x != 17
4914 define i1 @or_uge_ne_swap(i8 %x) {
4915 ; CHECK-LABEL: @or_uge_ne_swap(
4916 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
4917 ; CHECK-NEXT:    ret i1 [[B]]
4919   %a = icmp uge i8 %x, 23
4920   %b = icmp ne i8 %x, 17
4921   %c = or i1 %a, %b
4922   ret i1 %c
4925 ; x >=u 23 || x >=s 17
4927 define i1 @or_uge_sge_swap(i8 %x) {
4928 ; CHECK-LABEL: @or_uge_sge_swap(
4929 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
4930 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
4931 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4932 ; CHECK-NEXT:    ret i1 [[C]]
4934   %a = icmp uge i8 %x, 23
4935   %b = icmp sge i8 %x, 17
4936   %c = or i1 %a, %b
4937   ret i1 %c
4940 ; x >=u 23 || x >s 17
4942 define i1 @or_uge_sgt_swap(i8 %x) {
4943 ; CHECK-LABEL: @or_uge_sgt_swap(
4944 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
4945 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
4946 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4947 ; CHECK-NEXT:    ret i1 [[C]]
4949   %a = icmp uge i8 %x, 23
4950   %b = icmp sgt i8 %x, 17
4951   %c = or i1 %a, %b
4952   ret i1 %c
4955 ; x >=u 23 || x <=s 17
4957 define i1 @or_uge_sle_swap(i8 %x) {
4958 ; CHECK-LABEL: @or_uge_sle_swap(
4959 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
4960 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
4961 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4962 ; CHECK-NEXT:    ret i1 [[C]]
4964   %a = icmp uge i8 %x, 23
4965   %b = icmp sle i8 %x, 17
4966   %c = or i1 %a, %b
4967   ret i1 %c
4970 ; x >=u 23 || x <s 17
4972 define i1 @or_uge_slt_swap(i8 %x) {
4973 ; CHECK-LABEL: @or_uge_slt_swap(
4974 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
4975 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
4976 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
4977 ; CHECK-NEXT:    ret i1 [[C]]
4979   %a = icmp uge i8 %x, 23
4980   %b = icmp slt i8 %x, 17
4981   %c = or i1 %a, %b
4982   ret i1 %c
4985 ; x >=u 23 || x >=u 17
4987 define i1 @or_uge_uge_swap(i8 %x) {
4988 ; CHECK-LABEL: @or_uge_uge_swap(
4989 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
4990 ; CHECK-NEXT:    ret i1 [[B]]
4992   %a = icmp uge i8 %x, 23
4993   %b = icmp uge i8 %x, 17
4994   %c = or i1 %a, %b
4995   ret i1 %c
4998 ; x >=u 23 || x >u 17
5000 define i1 @or_uge_ugt_swap(i8 %x) {
5001 ; CHECK-LABEL: @or_uge_ugt_swap(
5002 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
5003 ; CHECK-NEXT:    ret i1 [[B]]
5005   %a = icmp uge i8 %x, 23
5006   %b = icmp ugt i8 %x, 17
5007   %c = or i1 %a, %b
5008   ret i1 %c
5011 ; x >=u 23 || x <=u 17
5013 define i1 @or_uge_ule_swap(i8 %x) {
5014 ; CHECK-LABEL: @or_uge_ule_swap(
5015 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
5016 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
5017 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5018 ; CHECK-NEXT:    ret i1 [[C]]
5020   %a = icmp uge i8 %x, 23
5021   %b = icmp ule i8 %x, 17
5022   %c = or i1 %a, %b
5023   ret i1 %c
5026 ; x >=u 23 || x <u 17
5028 define i1 @or_uge_ult_swap(i8 %x) {
5029 ; CHECK-LABEL: @or_uge_ult_swap(
5030 ; CHECK-NEXT:    [[A:%.*]] = icmp uge i8 %x, 23
5031 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
5032 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5033 ; CHECK-NEXT:    ret i1 [[C]]
5035   %a = icmp uge i8 %x, 23
5036   %b = icmp ult i8 %x, 17
5037   %c = or i1 %a, %b
5038   ret i1 %c
5041 ; ugt
5042 ; x >u 23 || x == 17
5044 define i1 @or_ugt_eq_swap(i8 %x) {
5045 ; CHECK-LABEL: @or_ugt_eq_swap(
5046 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5047 ; CHECK-NEXT:    [[B:%.*]] = icmp eq i8 %x, 17
5048 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5049 ; CHECK-NEXT:    ret i1 [[C]]
5051   %a = icmp ugt i8 %x, 23
5052   %b = icmp eq i8 %x, 17
5053   %c = or i1 %a, %b
5054   ret i1 %c
5057 ; x >u 23 || x != 17
5059 define i1 @or_ugt_ne_swap(i8 %x) {
5060 ; CHECK-LABEL: @or_ugt_ne_swap(
5061 ; CHECK-NEXT:    [[B:%.*]] = icmp ne i8 %x, 17
5062 ; CHECK-NEXT:    ret i1 [[B]]
5064   %a = icmp ugt i8 %x, 23
5065   %b = icmp ne i8 %x, 17
5066   %c = or i1 %a, %b
5067   ret i1 %c
5070 ; x >u 23 || x >=s 17
5072 define i1 @or_ugt_sge_swap(i8 %x) {
5073 ; CHECK-LABEL: @or_ugt_sge_swap(
5074 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5075 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
5076 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5077 ; CHECK-NEXT:    ret i1 [[C]]
5079   %a = icmp ugt i8 %x, 23
5080   %b = icmp sge i8 %x, 17
5081   %c = or i1 %a, %b
5082   ret i1 %c
5085 ; x >u 23 || x >s 17
5087 define i1 @or_ugt_sgt_swap(i8 %x) {
5088 ; CHECK-LABEL: @or_ugt_sgt_swap(
5089 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5090 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
5091 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5092 ; CHECK-NEXT:    ret i1 [[C]]
5094   %a = icmp ugt i8 %x, 23
5095   %b = icmp sgt i8 %x, 17
5096   %c = or i1 %a, %b
5097   ret i1 %c
5100 ; x >u 23 || x <=s 17
5102 define i1 @or_ugt_sle_swap(i8 %x) {
5103 ; CHECK-LABEL: @or_ugt_sle_swap(
5104 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5105 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
5106 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5107 ; CHECK-NEXT:    ret i1 [[C]]
5109   %a = icmp ugt i8 %x, 23
5110   %b = icmp sle i8 %x, 17
5111   %c = or i1 %a, %b
5112   ret i1 %c
5115 ; x >u 23 || x <s 17
5117 define i1 @or_ugt_slt_swap(i8 %x) {
5118 ; CHECK-LABEL: @or_ugt_slt_swap(
5119 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5120 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
5121 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5122 ; CHECK-NEXT:    ret i1 [[C]]
5124   %a = icmp ugt i8 %x, 23
5125   %b = icmp slt i8 %x, 17
5126   %c = or i1 %a, %b
5127   ret i1 %c
5130 ; x >u 23 || x >=u 17
5132 define i1 @or_ugt_uge_swap(i8 %x) {
5133 ; CHECK-LABEL: @or_ugt_uge_swap(
5134 ; CHECK-NEXT:    [[B:%.*]] = icmp uge i8 %x, 17
5135 ; CHECK-NEXT:    ret i1 [[B]]
5137   %a = icmp ugt i8 %x, 23
5138   %b = icmp uge i8 %x, 17
5139   %c = or i1 %a, %b
5140   ret i1 %c
5143 ; x >u 23 || x >u 17
5145 define i1 @or_ugt_ugt_swap(i8 %x) {
5146 ; CHECK-LABEL: @or_ugt_ugt_swap(
5147 ; CHECK-NEXT:    [[B:%.*]] = icmp ugt i8 %x, 17
5148 ; CHECK-NEXT:    ret i1 [[B]]
5150   %a = icmp ugt i8 %x, 23
5151   %b = icmp ugt i8 %x, 17
5152   %c = or i1 %a, %b
5153   ret i1 %c
5156 ; x >u 23 || x <=u 17
5158 define i1 @or_ugt_ule_swap(i8 %x) {
5159 ; CHECK-LABEL: @or_ugt_ule_swap(
5160 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5161 ; CHECK-NEXT:    [[B:%.*]] = icmp ule i8 %x, 17
5162 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5163 ; CHECK-NEXT:    ret i1 [[C]]
5165   %a = icmp ugt i8 %x, 23
5166   %b = icmp ule i8 %x, 17
5167   %c = or i1 %a, %b
5168   ret i1 %c
5171 ; x >u 23 || x <u 17
5173 define i1 @or_ugt_ult_swap(i8 %x) {
5174 ; CHECK-LABEL: @or_ugt_ult_swap(
5175 ; CHECK-NEXT:    [[A:%.*]] = icmp ugt i8 %x, 23
5176 ; CHECK-NEXT:    [[B:%.*]] = icmp ult i8 %x, 17
5177 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5178 ; CHECK-NEXT:    ret i1 [[C]]
5180   %a = icmp ugt i8 %x, 23
5181   %b = icmp ult i8 %x, 17
5182   %c = or i1 %a, %b
5183   ret i1 %c
5186 ; ule
5187 ; x <=u 23 || x == 17
5189 define i1 @or_ule_eq_swap(i8 %x) {
5190 ; CHECK-LABEL: @or_ule_eq_swap(
5191 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5192 ; CHECK-NEXT:    ret i1 [[A]]
5194   %a = icmp ule i8 %x, 23
5195   %b = icmp eq i8 %x, 17
5196   %c = or i1 %a, %b
5197   ret i1 %c
5200 ; x <=u 23 || x != 17
5202 define i1 @or_ule_ne_swap(i8 %x) {
5203 ; CHECK-LABEL: @or_ule_ne_swap(
5204 ; CHECK-NEXT:    ret i1 true
5206   %a = icmp ule i8 %x, 23
5207   %b = icmp ne i8 %x, 17
5208   %c = or i1 %a, %b
5209   ret i1 %c
5212 ; x <=u 23 || x >=s 17
5214 define i1 @or_ule_sge_swap(i8 %x) {
5215 ; CHECK-LABEL: @or_ule_sge_swap(
5216 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5217 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
5218 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5219 ; CHECK-NEXT:    ret i1 [[C]]
5221   %a = icmp ule i8 %x, 23
5222   %b = icmp sge i8 %x, 17
5223   %c = or i1 %a, %b
5224   ret i1 %c
5227 ; x <=u 23 || x >s 17
5229 define i1 @or_ule_sgt_swap(i8 %x) {
5230 ; CHECK-LABEL: @or_ule_sgt_swap(
5231 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5232 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
5233 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5234 ; CHECK-NEXT:    ret i1 [[C]]
5236   %a = icmp ule i8 %x, 23
5237   %b = icmp sgt i8 %x, 17
5238   %c = or i1 %a, %b
5239   ret i1 %c
5242 ; x <=u 23 || x <=s 17
5244 define i1 @or_ule_sle_swap(i8 %x) {
5245 ; CHECK-LABEL: @or_ule_sle_swap(
5246 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5247 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
5248 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5249 ; CHECK-NEXT:    ret i1 [[C]]
5251   %a = icmp ule i8 %x, 23
5252   %b = icmp sle i8 %x, 17
5253   %c = or i1 %a, %b
5254   ret i1 %c
5257 ; x <=u 23 || x <s 17
5259 define i1 @or_ule_slt_swap(i8 %x) {
5260 ; CHECK-LABEL: @or_ule_slt_swap(
5261 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5262 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
5263 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5264 ; CHECK-NEXT:    ret i1 [[C]]
5266   %a = icmp ule i8 %x, 23
5267   %b = icmp slt i8 %x, 17
5268   %c = or i1 %a, %b
5269   ret i1 %c
5272 ; x <=u 23 || x >=u 17
5274 define i1 @or_ule_uge_swap(i8 %x) {
5275 ; CHECK-LABEL: @or_ule_uge_swap(
5276 ; CHECK-NEXT:    ret i1 true
5278   %a = icmp ule i8 %x, 23
5279   %b = icmp uge i8 %x, 17
5280   %c = or i1 %a, %b
5281   ret i1 %c
5284 ; x <=u 23 || x >u 17
5286 define i1 @or_ule_ugt_swap(i8 %x) {
5287 ; CHECK-LABEL: @or_ule_ugt_swap(
5288 ; CHECK-NEXT:    ret i1 true
5290   %a = icmp ule i8 %x, 23
5291   %b = icmp ugt i8 %x, 17
5292   %c = or i1 %a, %b
5293   ret i1 %c
5296 ; x <=u 23 || x <=u 17
5298 define i1 @or_ule_ule_swap(i8 %x) {
5299 ; CHECK-LABEL: @or_ule_ule_swap(
5300 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5301 ; CHECK-NEXT:    ret i1 [[A]]
5303   %a = icmp ule i8 %x, 23
5304   %b = icmp ule i8 %x, 17
5305   %c = or i1 %a, %b
5306   ret i1 %c
5309 ; x <=u 23 || x <u 17
5311 define i1 @or_ule_ult_swap(i8 %x) {
5312 ; CHECK-LABEL: @or_ule_ult_swap(
5313 ; CHECK-NEXT:    [[A:%.*]] = icmp ule i8 %x, 23
5314 ; CHECK-NEXT:    ret i1 [[A]]
5316   %a = icmp ule i8 %x, 23
5317   %b = icmp ult i8 %x, 17
5318   %c = or i1 %a, %b
5319   ret i1 %c
5322 ; ult
5323 ; x <u 23 || x == 17
5325 define i1 @or_ult_eq_swap(i8 %x) {
5326 ; CHECK-LABEL: @or_ult_eq_swap(
5327 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5328 ; CHECK-NEXT:    ret i1 [[A]]
5330   %a = icmp ult i8 %x, 23
5331   %b = icmp eq i8 %x, 17
5332   %c = or i1 %a, %b
5333   ret i1 %c
5336 ; x <u 23 || x != 17
5338 define i1 @or_ult_ne_swap(i8 %x) {
5339 ; CHECK-LABEL: @or_ult_ne_swap(
5340 ; CHECK-NEXT:    ret i1 true
5342   %a = icmp ult i8 %x, 23
5343   %b = icmp ne i8 %x, 17
5344   %c = or i1 %a, %b
5345   ret i1 %c
5348 ; x <u 23 || x >=s 17
5350 define i1 @or_ult_sge_swap(i8 %x) {
5351 ; CHECK-LABEL: @or_ult_sge_swap(
5352 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5353 ; CHECK-NEXT:    [[B:%.*]] = icmp sge i8 %x, 17
5354 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5355 ; CHECK-NEXT:    ret i1 [[C]]
5357   %a = icmp ult i8 %x, 23
5358   %b = icmp sge i8 %x, 17
5359   %c = or i1 %a, %b
5360   ret i1 %c
5363 ; x <u 23 || x >s 17
5365 define i1 @or_ult_sgt_swap(i8 %x) {
5366 ; CHECK-LABEL: @or_ult_sgt_swap(
5367 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5368 ; CHECK-NEXT:    [[B:%.*]] = icmp sgt i8 %x, 17
5369 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5370 ; CHECK-NEXT:    ret i1 [[C]]
5372   %a = icmp ult i8 %x, 23
5373   %b = icmp sgt i8 %x, 17
5374   %c = or i1 %a, %b
5375   ret i1 %c
5378 ; x <u 23 || x <=s 17
5380 define i1 @or_ult_sle_swap(i8 %x) {
5381 ; CHECK-LABEL: @or_ult_sle_swap(
5382 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5383 ; CHECK-NEXT:    [[B:%.*]] = icmp sle i8 %x, 17
5384 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5385 ; CHECK-NEXT:    ret i1 [[C]]
5387   %a = icmp ult i8 %x, 23
5388   %b = icmp sle i8 %x, 17
5389   %c = or i1 %a, %b
5390   ret i1 %c
5393 ; x <u 23 || x <s 17
5395 define i1 @or_ult_slt_swap(i8 %x) {
5396 ; CHECK-LABEL: @or_ult_slt_swap(
5397 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5398 ; CHECK-NEXT:    [[B:%.*]] = icmp slt i8 %x, 17
5399 ; CHECK-NEXT:    [[C:%.*]] = or i1 [[A]], [[B]]
5400 ; CHECK-NEXT:    ret i1 [[C]]
5402   %a = icmp ult i8 %x, 23
5403   %b = icmp slt i8 %x, 17
5404   %c = or i1 %a, %b
5405   ret i1 %c
5408 ; x <u 23 || x >=u 17
5410 define i1 @or_ult_uge_swap(i8 %x) {
5411 ; CHECK-LABEL: @or_ult_uge_swap(
5412 ; CHECK-NEXT:    ret i1 true
5414   %a = icmp ult i8 %x, 23
5415   %b = icmp uge i8 %x, 17
5416   %c = or i1 %a, %b
5417   ret i1 %c
5420 ; x <u 23 || x >u 17
5422 define i1 @or_ult_ugt_swap(i8 %x) {
5423 ; CHECK-LABEL: @or_ult_ugt_swap(
5424 ; CHECK-NEXT:    ret i1 true
5426   %a = icmp ult i8 %x, 23
5427   %b = icmp ugt i8 %x, 17
5428   %c = or i1 %a, %b
5429   ret i1 %c
5432 ; x <u 23 || x <=u 17
5434 define i1 @or_ult_ule_swap(i8 %x) {
5435 ; CHECK-LABEL: @or_ult_ule_swap(
5436 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5437 ; CHECK-NEXT:    ret i1 [[A]]
5439   %a = icmp ult i8 %x, 23
5440   %b = icmp ule i8 %x, 17
5441   %c = or i1 %a, %b
5442   ret i1 %c
5445 ; x <u 23 || x <u 17
5447 define i1 @or_ult_ult_swap(i8 %x) {
5448 ; CHECK-LABEL: @or_ult_ult_swap(
5449 ; CHECK-NEXT:    [[A:%.*]] = icmp ult i8 %x, 23
5450 ; CHECK-NEXT:    ret i1 [[A]]
5452   %a = icmp ult i8 %x, 23
5453   %b = icmp ult i8 %x, 17
5454   %c = or i1 %a, %b
5455   ret i1 %c
5458 ; Special case - slt is uge
5459 ; x <u 31 && x <s 0
5461 define i1 @empty2(i32 %x) {
5462 ; CHECK-LABEL: @empty2(
5463 ; CHECK-NEXT:    ret i1 false
5465   %a = icmp ult i32 %x, 31
5466   %b = icmp slt i32 %x, 0
5467   %c = and i1 %a, %b
5468   ret i1 %c