1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -instcombine -S | FileCheck %s
3
4; There are 12 basic patterns (or 6 with DeMorganized equivalent) with
5;    2 (commute logic op) *
6;    2 (swap compare operands) *
7;    2 (signed/unsigned)
8; variations for a total of 96 tests.
9
10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
11;
12; (X == MAX) && (X < Y) --> false
13;
14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
15
16define i1 @slt_and_max(i8 %x, i8 %y)  {
17; CHECK-LABEL: @slt_and_max(
18; CHECK-NEXT:    ret i1 false
19;
20  %cmp = icmp slt i8 %x, %y
21  %cmpeq = icmp eq i8 %x, 127
22  %r = and i1 %cmp, %cmpeq
23  ret i1 %r
24}
25
26define <2 x i1> @slt_and_max_commute(<2 x i8> %x, <2 x i8> %y)  {
27; CHECK-LABEL: @slt_and_max_commute(
28; CHECK-NEXT:    ret <2 x i1> zeroinitializer
29;
30  %cmp = icmp slt <2 x i8> %x, %y
31  %cmpeq = icmp eq <2 x i8> %x, <i8 127, i8 127>
32  %r = and <2 x i1> %cmpeq, %cmp
33  ret <2 x i1> %r
34}
35
36define i1 @slt_swap_and_max(i8 %x, i8 %y)  {
37; CHECK-LABEL: @slt_swap_and_max(
38; CHECK-NEXT:    ret i1 false
39;
40  %cmp = icmp sgt i8 %y, %x
41  %cmpeq = icmp eq i8 %x, 127
42  %r = and i1 %cmp, %cmpeq
43  ret i1 %r
44}
45
46define i1 @slt_swap_and_max_commute(i8 %x, i8 %y)  {
47; CHECK-LABEL: @slt_swap_and_max_commute(
48; CHECK-NEXT:    ret i1 false
49;
50  %cmp = icmp sgt i8 %y, %x
51  %cmpeq = icmp eq i8 %x, 127
52  %r = and i1 %cmpeq, %cmp
53  ret i1 %r
54}
55
56define i1 @ult_and_max(i8 %x, i8 %y)  {
57; CHECK-LABEL: @ult_and_max(
58; CHECK-NEXT:    ret i1 false
59;
60  %cmp = icmp ult i8 %x, %y
61  %cmpeq = icmp eq i8 %x, 255
62  %r = and i1 %cmp, %cmpeq
63  ret i1 %r
64}
65
66define i1 @ult_and_max_commute(i8 %x, i8 %y)  {
67; CHECK-LABEL: @ult_and_max_commute(
68; CHECK-NEXT:    ret i1 false
69;
70  %cmp = icmp ult i8 %x, %y
71  %cmpeq = icmp eq i8 %x, 255
72  %r = and i1 %cmpeq, %cmp
73  ret i1 %r
74}
75
76define i1 @ult_swap_and_max(i8 %x, i8 %y)  {
77; CHECK-LABEL: @ult_swap_and_max(
78; CHECK-NEXT:    ret i1 false
79;
80  %cmp = icmp ugt i8 %y, %x
81  %cmpeq = icmp eq i8 %x, 255
82  %r = and i1 %cmp, %cmpeq
83  ret i1 %r
84}
85
86define i1 @ult_swap_and_max_commute(i8 %x, i8 %y)  {
87; CHECK-LABEL: @ult_swap_and_max_commute(
88; CHECK-NEXT:    ret i1 false
89;
90  %cmp = icmp ugt i8 %y, %x
91  %cmpeq = icmp eq i8 %x, 255
92  %r = and i1 %cmpeq, %cmp
93  ret i1 %r
94}
95
96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
97;
98; (X == MIN) && (X > Y) --> false
99;
100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
101
102define i1 @sgt_and_min(i9 %x, i9 %y)  {
103; CHECK-LABEL: @sgt_and_min(
104; CHECK-NEXT:    ret i1 false
105;
106  %cmp = icmp sgt i9 %x, %y
107  %cmpeq = icmp eq i9 %x, 256
108  %r = and i1 %cmp, %cmpeq
109  ret i1 %r
110}
111
112define i1 @sgt_and_min_commute(i8 %x, i8 %y)  {
113; CHECK-LABEL: @sgt_and_min_commute(
114; CHECK-NEXT:    ret i1 false
115;
116  %cmp = icmp sgt i8 %x, %y
117  %cmpeq = icmp eq i8 %x, 128
118  %r = and i1 %cmpeq, %cmp
119  ret i1 %r
120}
121
122define i1 @sgt_swap_and_min(i8 %x, i8 %y)  {
123; CHECK-LABEL: @sgt_swap_and_min(
124; CHECK-NEXT:    ret i1 false
125;
126  %cmp = icmp slt i8 %y, %x
127  %cmpeq = icmp eq i8 %x, 128
128  %r = and i1 %cmp, %cmpeq
129  ret i1 %r
130}
131
132define i1 @sgt_swap_and_min_commute(i8 %x, i8 %y)  {
133; CHECK-LABEL: @sgt_swap_and_min_commute(
134; CHECK-NEXT:    ret i1 false
135;
136  %cmp = icmp slt i8 %y, %x
137  %cmpeq = icmp eq i8 %x, 128
138  %r = and i1 %cmpeq, %cmp
139  ret i1 %r
140}
141
142define i1 @ugt_and_min(i8 %x, i8 %y)  {
143; CHECK-LABEL: @ugt_and_min(
144; CHECK-NEXT:    ret i1 false
145;
146  %cmp = icmp ugt i8 %x, %y
147  %cmpeq = icmp eq i8 %x, 0
148  %r = and i1 %cmp, %cmpeq
149  ret i1 %r
150}
151
152define i1 @ugt_and_min_commute(i8 %x, i8 %y)  {
153; CHECK-LABEL: @ugt_and_min_commute(
154; CHECK-NEXT:    ret i1 false
155;
156  %cmp = icmp ugt i8 %x, %y
157  %cmpeq = icmp eq i8 %x, 0
158  %r = and i1 %cmpeq, %cmp
159  ret i1 %r
160}
161
162define i1 @ugt_swap_and_min(i8 %x, i8 %y)  {
163; CHECK-LABEL: @ugt_swap_and_min(
164; CHECK-NEXT:    ret i1 false
165;
166  %cmp = icmp ult i8 %y, %x
167  %cmpeq = icmp eq i8 %x, 0
168  %r = and i1 %cmp, %cmpeq
169  ret i1 %r
170}
171
172define i1 @ugt_swap_and_min_commute(i8 %x, i8 %y)  {
173; CHECK-LABEL: @ugt_swap_and_min_commute(
174; CHECK-NEXT:    ret i1 false
175;
176  %cmp = icmp ult i8 %y, %x
177  %cmpeq = icmp eq i8 %x, 0
178  %r = and i1 %cmpeq, %cmp
179  ret i1 %r
180}
181
182;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
183;
184; (X != MAX) || (X >= Y) --> true
185;
186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
187
188define i1 @sge_or_not_max(i8 %x, i8 %y)  {
189; CHECK-LABEL: @sge_or_not_max(
190; CHECK-NEXT:    ret i1 true
191;
192  %cmp = icmp sge i8 %x, %y
193  %cmpeq = icmp ne i8 %x, 127
194  %r = or i1 %cmp, %cmpeq
195  ret i1 %r
196}
197
198define i1 @sge_or_not_max_commute(i8 %x, i8 %y)  {
199; CHECK-LABEL: @sge_or_not_max_commute(
200; CHECK-NEXT:    ret i1 true
201;
202  %cmp = icmp sge i8 %x, %y
203  %cmpeq = icmp ne i8 %x, 127
204  %r = or i1 %cmpeq, %cmp
205  ret i1 %r
206}
207
208define i1 @sge_swap_or_not_max(i8 %x, i8 %y)  {
209; CHECK-LABEL: @sge_swap_or_not_max(
210; CHECK-NEXT:    ret i1 true
211;
212  %cmp = icmp sle i8 %y, %x
213  %cmpeq = icmp ne i8 %x, 127
214  %r = or i1 %cmp, %cmpeq
215  ret i1 %r
216}
217
218define i1 @sge_swap_or_not_max_commute(i8 %x, i8 %y)  {
219; CHECK-LABEL: @sge_swap_or_not_max_commute(
220; CHECK-NEXT:    ret i1 true
221;
222  %cmp = icmp sle i8 %y, %x
223  %cmpeq = icmp ne i8 %x, 127
224  %r = or i1 %cmpeq, %cmp
225  ret i1 %r
226}
227
228define i1 @uge_or_not_max(i8 %x, i8 %y)  {
229; CHECK-LABEL: @uge_or_not_max(
230; CHECK-NEXT:    ret i1 true
231;
232  %cmp = icmp uge i8 %x, %y
233  %cmpeq = icmp ne i8 %x, 255
234  %r = or i1 %cmp, %cmpeq
235  ret i1 %r
236}
237
238define i1 @uge_or_not_max_commute(i8 %x, i8 %y)  {
239; CHECK-LABEL: @uge_or_not_max_commute(
240; CHECK-NEXT:    ret i1 true
241;
242  %cmp = icmp uge i8 %x, %y
243  %cmpeq = icmp ne i8 %x, 255
244  %r = or i1 %cmpeq, %cmp
245  ret i1 %r
246}
247
248define i1 @uge_swap_or_not_max(i8 %x, i8 %y)  {
249; CHECK-LABEL: @uge_swap_or_not_max(
250; CHECK-NEXT:    ret i1 true
251;
252  %cmp = icmp ule i8 %y, %x
253  %cmpeq = icmp ne i8 %x, 255
254  %r = or i1 %cmp, %cmpeq
255  ret i1 %r
256}
257
258define i1 @uge_swap_or_not_max_commute(i8 %x, i8 %y)  {
259; CHECK-LABEL: @uge_swap_or_not_max_commute(
260; CHECK-NEXT:    ret i1 true
261;
262  %cmp = icmp ule i8 %y, %x
263  %cmpeq = icmp ne i8 %x, 255
264  %r = or i1 %cmpeq, %cmp
265  ret i1 %r
266}
267
268;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
269;
270; (X != MIN) || (X <= Y) --> true
271;
272;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
273
274define i1 @sle_or_not_min(i8 %x, i8 %y)  {
275; CHECK-LABEL: @sle_or_not_min(
276; CHECK-NEXT:    ret i1 true
277;
278  %cmp = icmp sle i8 %x, %y
279  %cmpeq = icmp ne i8 %x, 128
280  %r = or i1 %cmp, %cmpeq
281  ret i1 %r
282}
283
284define i1 @sle_or_not_min_commute(i8 %x, i8 %y)  {
285; CHECK-LABEL: @sle_or_not_min_commute(
286; CHECK-NEXT:    ret i1 true
287;
288  %cmp = icmp sle i8 %x, %y
289  %cmpeq = icmp ne i8 %x, 128
290  %r = or i1 %cmpeq, %cmp
291  ret i1 %r
292}
293
294define i1 @sle_swap_or_not_min(i8 %x, i8 %y)  {
295; CHECK-LABEL: @sle_swap_or_not_min(
296; CHECK-NEXT:    ret i1 true
297;
298  %cmp = icmp sge i8 %y, %x
299  %cmpeq = icmp ne i8 %x, 128
300  %r = or i1 %cmp, %cmpeq
301  ret i1 %r
302}
303
304define i1 @sle_swap_or_not_min_commute(i8 %x, i8 %y)  {
305; CHECK-LABEL: @sle_swap_or_not_min_commute(
306; CHECK-NEXT:    ret i1 true
307;
308  %cmp = icmp sge i8 %y, %x
309  %cmpeq = icmp ne i8 %x, 128
310  %r = or i1 %cmpeq, %cmp
311  ret i1 %r
312}
313
314define i1 @ule_or_not_min(i427 %x, i427 %y)  {
315; CHECK-LABEL: @ule_or_not_min(
316; CHECK-NEXT:    ret i1 true
317;
318  %cmp = icmp ule i427 %x, %y
319  %cmpeq = icmp ne i427 %x, 0
320  %r = or i1 %cmp, %cmpeq
321  ret i1 %r
322}
323
324define i1 @ule_or_not_min_commute(i8 %x, i8 %y)  {
325; CHECK-LABEL: @ule_or_not_min_commute(
326; CHECK-NEXT:    ret i1 true
327;
328  %cmp = icmp ule i8 %x, %y
329  %cmpeq = icmp ne i8 %x, 0
330  %r = or i1 %cmpeq, %cmp
331  ret i1 %r
332}
333
334define i1 @ule_swap_or_not_min(i8 %x, i8 %y)  {
335; CHECK-LABEL: @ule_swap_or_not_min(
336; CHECK-NEXT:    ret i1 true
337;
338  %cmp = icmp uge i8 %y, %x
339  %cmpeq = icmp ne i8 %x, 0
340  %r = or i1 %cmp, %cmpeq
341  ret i1 %r
342}
343
344define i1 @ule_swap_or_not_min_commute(i8 %x, i8 %y)  {
345; CHECK-LABEL: @ule_swap_or_not_min_commute(
346; CHECK-NEXT:    ret i1 true
347;
348  %cmp = icmp uge i8 %y, %x
349  %cmpeq = icmp ne i8 %x, 0
350  %r = or i1 %cmpeq, %cmp
351  ret i1 %r
352}
353
354;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
355;
356; (X == MAX) && (X >= Y) --> X == MAX
357;
358;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
359
360define i1 @sge_and_max(i8 %x, i8 %y)  {
361; CHECK-LABEL: @sge_and_max(
362; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
363; CHECK-NEXT:    ret i1 [[CMPEQ]]
364;
365  %cmp = icmp sge i8 %x, %y
366  %cmpeq = icmp eq i8 %x, 127
367  %r = and i1 %cmp, %cmpeq
368  ret i1 %r
369}
370
371define i1 @sge_and_max_commute(i8 %x, i8 %y)  {
372; CHECK-LABEL: @sge_and_max_commute(
373; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
374; CHECK-NEXT:    ret i1 [[CMPEQ]]
375;
376  %cmp = icmp sge i8 %x, %y
377  %cmpeq = icmp eq i8 %x, 127
378  %r = and i1 %cmpeq, %cmp
379  ret i1 %r
380}
381
382define i1 @sge_swap_and_max(i8 %x, i8 %y)  {
383; CHECK-LABEL: @sge_swap_and_max(
384; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
385; CHECK-NEXT:    ret i1 [[CMPEQ]]
386;
387  %cmp = icmp sle i8 %y, %x
388  %cmpeq = icmp eq i8 %x, 127
389  %r = and i1 %cmp, %cmpeq
390  ret i1 %r
391}
392
393define i1 @sge_swap_and_max_commute(i8 %x, i8 %y)  {
394; CHECK-LABEL: @sge_swap_and_max_commute(
395; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 127
396; CHECK-NEXT:    ret i1 [[CMPEQ]]
397;
398  %cmp = icmp sle i8 %y, %x
399  %cmpeq = icmp eq i8 %x, 127
400  %r = and i1 %cmpeq, %cmp
401  ret i1 %r
402}
403
404define i1 @uge_and_max(i8 %x, i8 %y)  {
405; CHECK-LABEL: @uge_and_max(
406; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
407; CHECK-NEXT:    ret i1 [[CMPEQ]]
408;
409  %cmp = icmp uge i8 %x, %y
410  %cmpeq = icmp eq i8 %x, 255
411  %r = and i1 %cmp, %cmpeq
412  ret i1 %r
413}
414
415define i1 @uge_and_max_commute(i8 %x, i8 %y)  {
416; CHECK-LABEL: @uge_and_max_commute(
417; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
418; CHECK-NEXT:    ret i1 [[CMPEQ]]
419;
420  %cmp = icmp uge i8 %x, %y
421  %cmpeq = icmp eq i8 %x, 255
422  %r = and i1 %cmpeq, %cmp
423  ret i1 %r
424}
425
426define i1 @uge_swap_and_max(i8 %x, i8 %y)  {
427; CHECK-LABEL: @uge_swap_and_max(
428; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
429; CHECK-NEXT:    ret i1 [[CMPEQ]]
430;
431  %cmp = icmp ule i8 %y, %x
432  %cmpeq = icmp eq i8 %x, 255
433  %r = and i1 %cmp, %cmpeq
434  ret i1 %r
435}
436
437define i1 @uge_swap_and_max_commute(i8 %x, i8 %y)  {
438; CHECK-LABEL: @uge_swap_and_max_commute(
439; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -1
440; CHECK-NEXT:    ret i1 [[CMPEQ]]
441;
442  %cmp = icmp ule i8 %y, %x
443  %cmpeq = icmp eq i8 %x, 255
444  %r = and i1 %cmpeq, %cmp
445  ret i1 %r
446}
447
448;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
449;
450; (X == MIN) && (X <= Y) --> X == MIN
451;
452;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
453
454define i1 @sle_and_min(i8 %x, i8 %y)  {
455; CHECK-LABEL: @sle_and_min(
456; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
457; CHECK-NEXT:    ret i1 [[CMPEQ]]
458;
459  %cmp = icmp sle i8 %x, %y
460  %cmpeq = icmp eq i8 %x, 128
461  %r = and i1 %cmp, %cmpeq
462  ret i1 %r
463}
464
465define i1 @sle_and_min_commute(i8 %x, i8 %y)  {
466; CHECK-LABEL: @sle_and_min_commute(
467; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
468; CHECK-NEXT:    ret i1 [[CMPEQ]]
469;
470  %cmp = icmp sle i8 %x, %y
471  %cmpeq = icmp eq i8 %x, 128
472  %r = and i1 %cmpeq, %cmp
473  ret i1 %r
474}
475
476define i1 @sle_swap_and_min(i8 %x, i8 %y)  {
477; CHECK-LABEL: @sle_swap_and_min(
478; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
479; CHECK-NEXT:    ret i1 [[CMPEQ]]
480;
481  %cmp = icmp sge i8 %y, %x
482  %cmpeq = icmp eq i8 %x, 128
483  %r = and i1 %cmp, %cmpeq
484  ret i1 %r
485}
486
487define i1 @sle_swap_and_min_commute(i8 %x, i8 %y)  {
488; CHECK-LABEL: @sle_swap_and_min_commute(
489; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], -128
490; CHECK-NEXT:    ret i1 [[CMPEQ]]
491;
492  %cmp = icmp sge i8 %y, %x
493  %cmpeq = icmp eq i8 %x, 128
494  %r = and i1 %cmpeq, %cmp
495  ret i1 %r
496}
497
498define i1 @ule_and_min(i8 %x, i8 %y)  {
499; CHECK-LABEL: @ule_and_min(
500; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
501; CHECK-NEXT:    ret i1 [[CMPEQ]]
502;
503  %cmp = icmp ule i8 %x, %y
504  %cmpeq = icmp eq i8 %x, 0
505  %r = and i1 %cmp, %cmpeq
506  ret i1 %r
507}
508
509define i1 @ule_and_min_commute(i8 %x, i8 %y)  {
510; CHECK-LABEL: @ule_and_min_commute(
511; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
512; CHECK-NEXT:    ret i1 [[CMPEQ]]
513;
514  %cmp = icmp ule i8 %x, %y
515  %cmpeq = icmp eq i8 %x, 0
516  %r = and i1 %cmpeq, %cmp
517  ret i1 %r
518}
519
520define i1 @ule_swap_and_min(i8 %x, i8 %y)  {
521; CHECK-LABEL: @ule_swap_and_min(
522; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
523; CHECK-NEXT:    ret i1 [[CMPEQ]]
524;
525  %cmp = icmp uge i8 %y, %x
526  %cmpeq = icmp eq i8 %x, 0
527  %r = and i1 %cmp, %cmpeq
528  ret i1 %r
529}
530
531define i1 @ule_swap_and_min_commute(i8 %x, i8 %y)  {
532; CHECK-LABEL: @ule_swap_and_min_commute(
533; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp eq i8 [[X:%.*]], 0
534; CHECK-NEXT:    ret i1 [[CMPEQ]]
535;
536  %cmp = icmp uge i8 %y, %x
537  %cmpeq = icmp eq i8 %x, 0
538  %r = and i1 %cmpeq, %cmp
539  ret i1 %r
540}
541
542;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
543;
544; (X == MAX) || (X >= Y) --> X >= Y
545;
546;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
547
548define i1 @sge_or_max(i8 %x, i8 %y)  {
549; CHECK-LABEL: @sge_or_max(
550; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
551; CHECK-NEXT:    ret i1 [[CMP]]
552;
553  %cmp = icmp sge i8 %x, %y
554  %cmpeq = icmp eq i8 %x, 127
555  %r = or i1 %cmp, %cmpeq
556  ret i1 %r
557}
558
559define i1 @sge_or_max_commute(i8 %x, i8 %y)  {
560; CHECK-LABEL: @sge_or_max_commute(
561; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i8 [[X:%.*]], [[Y:%.*]]
562; CHECK-NEXT:    ret i1 [[CMP]]
563;
564  %cmp = icmp sge i8 %x, %y
565  %cmpeq = icmp eq i8 %x, 127
566  %r = or i1 %cmpeq, %cmp
567  ret i1 %r
568}
569
570define i1 @sge_swap_or_max(i8 %x, i8 %y)  {
571; CHECK-LABEL: @sge_swap_or_max(
572; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
573; CHECK-NEXT:    ret i1 [[CMP]]
574;
575  %cmp = icmp sle i8 %y, %x
576  %cmpeq = icmp eq i8 %x, 127
577  %r = or i1 %cmp, %cmpeq
578  ret i1 %r
579}
580
581define i1 @sge_swap_or_max_commute(i8 %x, i8 %y)  {
582; CHECK-LABEL: @sge_swap_or_max_commute(
583; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i8 [[Y:%.*]], [[X:%.*]]
584; CHECK-NEXT:    ret i1 [[CMP]]
585;
586  %cmp = icmp sle i8 %y, %x
587  %cmpeq = icmp eq i8 %x, 127
588  %r = or i1 %cmpeq, %cmp
589  ret i1 %r
590}
591
592define i1 @uge_or_max(i8 %x, i8 %y)  {
593; CHECK-LABEL: @uge_or_max(
594; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
595; CHECK-NEXT:    ret i1 [[CMP]]
596;
597  %cmp = icmp uge i8 %x, %y
598  %cmpeq = icmp eq i8 %x, 255
599  %r = or i1 %cmp, %cmpeq
600  ret i1 %r
601}
602
603define i1 @uge_or_max_commute(i8 %x, i8 %y)  {
604; CHECK-LABEL: @uge_or_max_commute(
605; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[X:%.*]], [[Y:%.*]]
606; CHECK-NEXT:    ret i1 [[CMP]]
607;
608  %cmp = icmp uge i8 %x, %y
609  %cmpeq = icmp eq i8 %x, 255
610  %r = or i1 %cmpeq, %cmp
611  ret i1 %r
612}
613
614define i1 @uge_swap_or_max(i8 %x, i8 %y)  {
615; CHECK-LABEL: @uge_swap_or_max(
616; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
617; CHECK-NEXT:    ret i1 [[CMP]]
618;
619  %cmp = icmp ule i8 %y, %x
620  %cmpeq = icmp eq i8 %x, 255
621  %r = or i1 %cmp, %cmpeq
622  ret i1 %r
623}
624
625define i1 @uge_swap_or_max_commute(i8 %x, i8 %y)  {
626; CHECK-LABEL: @uge_swap_or_max_commute(
627; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8 [[Y:%.*]], [[X:%.*]]
628; CHECK-NEXT:    ret i1 [[CMP]]
629;
630  %cmp = icmp ule i8 %y, %x
631  %cmpeq = icmp eq i8 %x, 255
632  %r = or i1 %cmpeq, %cmp
633  ret i1 %r
634}
635
636;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
637;
638; (X == MIN) || (X <= Y) --> X <= Y
639;
640;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
641
642define i1 @sle_or_min(i8 %x, i8 %y)  {
643; CHECK-LABEL: @sle_or_min(
644; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
645; CHECK-NEXT:    ret i1 [[CMP]]
646;
647  %cmp = icmp sle i8 %x, %y
648  %cmpeq = icmp eq i8 %x, 128
649  %r = or i1 %cmp, %cmpeq
650  ret i1 %r
651}
652
653define i1 @sle_or_min_commute(i8 %x, i8 %y)  {
654; CHECK-LABEL: @sle_or_min_commute(
655; CHECK-NEXT:    [[CMP:%.*]] = icmp sle i8 [[X:%.*]], [[Y:%.*]]
656; CHECK-NEXT:    ret i1 [[CMP]]
657;
658  %cmp = icmp sle i8 %x, %y
659  %cmpeq = icmp eq i8 %x, 128
660  %r = or i1 %cmpeq, %cmp
661  ret i1 %r
662}
663
664define i1 @sle_swap_or_min(i8 %x, i8 %y)  {
665; CHECK-LABEL: @sle_swap_or_min(
666; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
667; CHECK-NEXT:    ret i1 [[CMP]]
668;
669  %cmp = icmp sge i8 %y, %x
670  %cmpeq = icmp eq i8 %x, 128
671  %r = or i1 %cmp, %cmpeq
672  ret i1 %r
673}
674
675define i1 @sle_swap_or_min_commute(i8 %x, i8 %y)  {
676; CHECK-LABEL: @sle_swap_or_min_commute(
677; CHECK-NEXT:    [[CMP:%.*]] = icmp sge i8 [[Y:%.*]], [[X:%.*]]
678; CHECK-NEXT:    ret i1 [[CMP]]
679;
680  %cmp = icmp sge i8 %y, %x
681  %cmpeq = icmp eq i8 %x, 128
682  %r = or i1 %cmpeq, %cmp
683  ret i1 %r
684}
685
686define i1 @ule_or_min(i8 %x, i8 %y)  {
687; CHECK-LABEL: @ule_or_min(
688; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
689; CHECK-NEXT:    ret i1 [[CMP]]
690;
691  %cmp = icmp ule i8 %x, %y
692  %cmpeq = icmp eq i8 %x, 0
693  %r = or i1 %cmp, %cmpeq
694  ret i1 %r
695}
696
697define i1 @ule_or_min_commute(i8 %x, i8 %y)  {
698; CHECK-LABEL: @ule_or_min_commute(
699; CHECK-NEXT:    [[CMP:%.*]] = icmp ule i8 [[X:%.*]], [[Y:%.*]]
700; CHECK-NEXT:    ret i1 [[CMP]]
701;
702  %cmp = icmp ule i8 %x, %y
703  %cmpeq = icmp eq i8 %x, 0
704  %r = or i1 %cmpeq, %cmp
705  ret i1 %r
706}
707
708define i1 @ule_swap_or_min(i8 %x, i8 %y)  {
709; CHECK-LABEL: @ule_swap_or_min(
710; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
711; CHECK-NEXT:    ret i1 [[CMP]]
712;
713  %cmp = icmp uge i8 %y, %x
714  %cmpeq = icmp eq i8 %x, 0
715  %r = or i1 %cmp, %cmpeq
716  ret i1 %r
717}
718
719define i1 @ule_swap_or_min_commute(i8 %x, i8 %y)  {
720; CHECK-LABEL: @ule_swap_or_min_commute(
721; CHECK-NEXT:    [[CMP:%.*]] = icmp uge i8 [[Y:%.*]], [[X:%.*]]
722; CHECK-NEXT:    ret i1 [[CMP]]
723;
724  %cmp = icmp uge i8 %y, %x
725  %cmpeq = icmp eq i8 %x, 0
726  %r = or i1 %cmpeq, %cmp
727  ret i1 %r
728}
729
730;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
731;
732; (X != MAX) && (X < Y) --> X < Y
733;
734;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
735
736define i1 @slt_and_not_max(i8 %x, i8 %y)  {
737; CHECK-LABEL: @slt_and_not_max(
738; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
739; CHECK-NEXT:    ret i1 [[CMP]]
740;
741  %cmp = icmp slt i8 %x, %y
742  %cmpeq = icmp ne i8 %x, 127
743  %r = and i1 %cmp, %cmpeq
744  ret i1 %r
745}
746
747define i1 @slt_and_not_max_commute(i8 %x, i8 %y)  {
748; CHECK-LABEL: @slt_and_not_max_commute(
749; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[X:%.*]], [[Y:%.*]]
750; CHECK-NEXT:    ret i1 [[CMP]]
751;
752  %cmp = icmp slt i8 %x, %y
753  %cmpeq = icmp ne i8 %x, 127
754  %r = and i1 %cmpeq, %cmp
755  ret i1 %r
756}
757
758define i1 @slt_swap_and_not_max(i8 %x, i8 %y)  {
759; CHECK-LABEL: @slt_swap_and_not_max(
760; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
761; CHECK-NEXT:    ret i1 [[CMP]]
762;
763  %cmp = icmp sgt i8 %y, %x
764  %cmpeq = icmp ne i8 %x, 127
765  %r = and i1 %cmp, %cmpeq
766  ret i1 %r
767}
768
769define i1 @slt_swap_and_not_max_commute(i8 %x, i8 %y)  {
770; CHECK-LABEL: @slt_swap_and_not_max_commute(
771; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[Y:%.*]], [[X:%.*]]
772; CHECK-NEXT:    ret i1 [[CMP]]
773;
774  %cmp = icmp sgt i8 %y, %x
775  %cmpeq = icmp ne i8 %x, 127
776  %r = and i1 %cmpeq, %cmp
777  ret i1 %r
778}
779
780define i1 @ult_and_not_max(i8 %x, i8 %y)  {
781; CHECK-LABEL: @ult_and_not_max(
782; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
783; CHECK-NEXT:    ret i1 [[CMP]]
784;
785  %cmp = icmp ult i8 %x, %y
786  %cmpeq = icmp ne i8 %x, 255
787  %r = and i1 %cmp, %cmpeq
788  ret i1 %r
789}
790
791define i1 @ult_and_not_max_commute(i8 %x, i8 %y)  {
792; CHECK-LABEL: @ult_and_not_max_commute(
793; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[X:%.*]], [[Y:%.*]]
794; CHECK-NEXT:    ret i1 [[CMP]]
795;
796  %cmp = icmp ult i8 %x, %y
797  %cmpeq = icmp ne i8 %x, 255
798  %r = and i1 %cmpeq, %cmp
799  ret i1 %r
800}
801
802define i1 @ult_swap_and_not_max(i8 %x, i8 %y)  {
803; CHECK-LABEL: @ult_swap_and_not_max(
804; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
805; CHECK-NEXT:    ret i1 [[CMP]]
806;
807  %cmp = icmp ugt i8 %y, %x
808  %cmpeq = icmp ne i8 %x, 255
809  %r = and i1 %cmp, %cmpeq
810  ret i1 %r
811}
812
813define i1 @ult_swap_and_not_max_commute(i8 %x, i8 %y)  {
814; CHECK-LABEL: @ult_swap_and_not_max_commute(
815; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[Y:%.*]], [[X:%.*]]
816; CHECK-NEXT:    ret i1 [[CMP]]
817;
818  %cmp = icmp ugt i8 %y, %x
819  %cmpeq = icmp ne i8 %x, 255
820  %r = and i1 %cmpeq, %cmp
821  ret i1 %r
822}
823
824;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
825;
826; (X != MIN) && (X > Y) --> X > Y
827;
828;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
829
830define i1 @sgt_and_not_min(i8 %x, i8 %y)  {
831; CHECK-LABEL: @sgt_and_not_min(
832; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
833; CHECK-NEXT:    ret i1 [[CMP]]
834;
835  %cmp = icmp sgt i8 %x, %y
836  %cmpeq = icmp ne i8 %x, 128
837  %r = and i1 %cmp, %cmpeq
838  ret i1 %r
839}
840
841define i1 @sgt_and_not_min_commute(i8 %x, i8 %y)  {
842; CHECK-LABEL: @sgt_and_not_min_commute(
843; CHECK-NEXT:    [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], [[Y:%.*]]
844; CHECK-NEXT:    ret i1 [[CMP]]
845;
846  %cmp = icmp sgt i8 %x, %y
847  %cmpeq = icmp ne i8 %x, 128
848  %r = and i1 %cmpeq, %cmp
849  ret i1 %r
850}
851
852define i1 @sgt_swap_and_not_min(i8 %x, i8 %y)  {
853; CHECK-LABEL: @sgt_swap_and_not_min(
854; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
855; CHECK-NEXT:    ret i1 [[CMP]]
856;
857  %cmp = icmp slt i8 %y, %x
858  %cmpeq = icmp ne i8 %x, 128
859  %r = and i1 %cmp, %cmpeq
860  ret i1 %r
861}
862
863define i1 @sgt_swap_and_not_min_commute(i8 %x, i8 %y)  {
864; CHECK-LABEL: @sgt_swap_and_not_min_commute(
865; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i8 [[Y:%.*]], [[X:%.*]]
866; CHECK-NEXT:    ret i1 [[CMP]]
867;
868  %cmp = icmp slt i8 %y, %x
869  %cmpeq = icmp ne i8 %x, 128
870  %r = and i1 %cmpeq, %cmp
871  ret i1 %r
872}
873
874define i1 @ugt_and_not_min(i8 %x, i8 %y)  {
875; CHECK-LABEL: @ugt_and_not_min(
876; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
877; CHECK-NEXT:    ret i1 [[CMP]]
878;
879  %cmp = icmp ugt i8 %x, %y
880  %cmpeq = icmp ne i8 %x, 0
881  %r = and i1 %cmp, %cmpeq
882  ret i1 %r
883}
884
885define i1 @ugt_and_not_min_commute(i8 %x, i8 %y)  {
886; CHECK-LABEL: @ugt_and_not_min_commute(
887; CHECK-NEXT:    [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], [[Y:%.*]]
888; CHECK-NEXT:    ret i1 [[CMP]]
889;
890  %cmp = icmp ugt i8 %x, %y
891  %cmpeq = icmp ne i8 %x, 0
892  %r = and i1 %cmpeq, %cmp
893  ret i1 %r
894}
895
896define i1 @ugt_swap_and_not_min(i8 %x, i8 %y)  {
897; CHECK-LABEL: @ugt_swap_and_not_min(
898; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
899; CHECK-NEXT:    ret i1 [[CMP]]
900;
901  %cmp = icmp ult i8 %y, %x
902  %cmpeq = icmp ne i8 %x, 0
903  %r = and i1 %cmp, %cmpeq
904  ret i1 %r
905}
906
907define i1 @ugt_swap_and_not_min_commute(i8 %x, i8 %y)  {
908; CHECK-LABEL: @ugt_swap_and_not_min_commute(
909; CHECK-NEXT:    [[CMP:%.*]] = icmp ult i8 [[Y:%.*]], [[X:%.*]]
910; CHECK-NEXT:    ret i1 [[CMP]]
911;
912  %cmp = icmp ult i8 %y, %x
913  %cmpeq = icmp ne i8 %x, 0
914  %r = and i1 %cmpeq, %cmp
915  ret i1 %r
916}
917
918;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
919;
920; (X != MAX) || (X < Y) --> X != MAX
921;
922;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
923
924define i1 @slt_or_not_max(i8 %x, i8 %y)  {
925; CHECK-LABEL: @slt_or_not_max(
926; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
927; CHECK-NEXT:    ret i1 [[CMPEQ]]
928;
929  %cmp = icmp slt i8 %x, %y
930  %cmpeq = icmp ne i8 %x, 127
931  %r = or i1 %cmp, %cmpeq
932  ret i1 %r
933}
934
935define i1 @slt_or_not_max_commute(i8 %x, i8 %y)  {
936; CHECK-LABEL: @slt_or_not_max_commute(
937; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
938; CHECK-NEXT:    ret i1 [[CMPEQ]]
939;
940  %cmp = icmp slt i8 %x, %y
941  %cmpeq = icmp ne i8 %x, 127
942  %r = or i1 %cmpeq, %cmp
943  ret i1 %r
944}
945
946define i1 @slt_swap_or_not_max(i8 %x, i8 %y)  {
947; CHECK-LABEL: @slt_swap_or_not_max(
948; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
949; CHECK-NEXT:    ret i1 [[CMPEQ]]
950;
951  %cmp = icmp sgt i8 %y, %x
952  %cmpeq = icmp ne i8 %x, 127
953  %r = or i1 %cmp, %cmpeq
954  ret i1 %r
955}
956
957define i1 @slt_swap_or_not_max_commute(i8 %x, i8 %y)  {
958; CHECK-LABEL: @slt_swap_or_not_max_commute(
959; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 127
960; CHECK-NEXT:    ret i1 [[CMPEQ]]
961;
962  %cmp = icmp sgt i8 %y, %x
963  %cmpeq = icmp ne i8 %x, 127
964  %r = or i1 %cmpeq, %cmp
965  ret i1 %r
966}
967
968define i1 @ult_or_not_max(i8 %x, i8 %y)  {
969; CHECK-LABEL: @ult_or_not_max(
970; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
971; CHECK-NEXT:    ret i1 [[CMPEQ]]
972;
973  %cmp = icmp ult i8 %x, %y
974  %cmpeq = icmp ne i8 %x, 255
975  %r = or i1 %cmp, %cmpeq
976  ret i1 %r
977}
978
979define i1 @ult_or_not_max_commute(i8 %x, i8 %y)  {
980; CHECK-LABEL: @ult_or_not_max_commute(
981; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
982; CHECK-NEXT:    ret i1 [[CMPEQ]]
983;
984  %cmp = icmp ult i8 %x, %y
985  %cmpeq = icmp ne i8 %x, 255
986  %r = or i1 %cmpeq, %cmp
987  ret i1 %r
988}
989
990define i1 @ult_swap_or_not_max(i8 %x, i8 %y)  {
991; CHECK-LABEL: @ult_swap_or_not_max(
992; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
993; CHECK-NEXT:    ret i1 [[CMPEQ]]
994;
995  %cmp = icmp ugt i8 %y, %x
996  %cmpeq = icmp ne i8 %x, 255
997  %r = or i1 %cmp, %cmpeq
998  ret i1 %r
999}
1000
1001define i1 @ult_swap_or_not_max_commute(i8 %x, i8 %y)  {
1002; CHECK-LABEL: @ult_swap_or_not_max_commute(
1003; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -1
1004; CHECK-NEXT:    ret i1 [[CMPEQ]]
1005;
1006  %cmp = icmp ugt i8 %y, %x
1007  %cmpeq = icmp ne i8 %x, 255
1008  %r = or i1 %cmpeq, %cmp
1009  ret i1 %r
1010}
1011
1012;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1013;
1014; (X != MIN) || (X > Y) --> X != MIN
1015;
1016;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
1017
1018define i1 @sgt_or_not_min(i8 %x, i8 %y)  {
1019; CHECK-LABEL: @sgt_or_not_min(
1020; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
1021; CHECK-NEXT:    ret i1 [[CMPEQ]]
1022;
1023  %cmp = icmp sgt i8 %x, %y
1024  %cmpeq = icmp ne i8 %x, 128
1025  %r = or i1 %cmp, %cmpeq
1026  ret i1 %r
1027}
1028
1029define i1 @sgt_or_not_min_commute(i8 %x, i8 %y)  {
1030; CHECK-LABEL: @sgt_or_not_min_commute(
1031; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
1032; CHECK-NEXT:    ret i1 [[CMPEQ]]
1033;
1034  %cmp = icmp sgt i8 %x, %y
1035  %cmpeq = icmp ne i8 %x, 128
1036  %r = or i1 %cmpeq, %cmp
1037  ret i1 %r
1038}
1039
1040define i1 @sgt_swap_or_not_min(i8 %x, i8 %y)  {
1041; CHECK-LABEL: @sgt_swap_or_not_min(
1042; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
1043; CHECK-NEXT:    ret i1 [[CMPEQ]]
1044;
1045  %cmp = icmp slt i8 %y, %x
1046  %cmpeq = icmp ne i8 %x, 128
1047  %r = or i1 %cmp, %cmpeq
1048  ret i1 %r
1049}
1050
1051define i1 @sgt_swap_or_not_min_commute(i8 %x, i8 %y)  {
1052; CHECK-LABEL: @sgt_swap_or_not_min_commute(
1053; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], -128
1054; CHECK-NEXT:    ret i1 [[CMPEQ]]
1055;
1056  %cmp = icmp slt i8 %y, %x
1057  %cmpeq = icmp ne i8 %x, 128
1058  %r = or i1 %cmpeq, %cmp
1059  ret i1 %r
1060}
1061
1062define i1 @ugt_or_not_min(i8 %x, i8 %y)  {
1063; CHECK-LABEL: @ugt_or_not_min(
1064; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
1065; CHECK-NEXT:    ret i1 [[CMPEQ]]
1066;
1067  %cmp = icmp ugt i8 %x, %y
1068  %cmpeq = icmp ne i8 %x, 0
1069  %r = or i1 %cmp, %cmpeq
1070  ret i1 %r
1071}
1072
1073define i1 @ugt_or_not_min_commute(i8 %x, i8 %y)  {
1074; CHECK-LABEL: @ugt_or_not_min_commute(
1075; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
1076; CHECK-NEXT:    ret i1 [[CMPEQ]]
1077;
1078  %cmp = icmp ugt i8 %x, %y
1079  %cmpeq = icmp ne i8 %x, 0
1080  %r = or i1 %cmpeq, %cmp
1081  ret i1 %r
1082}
1083
1084define i1 @ugt_swap_or_not_min(i8 %x, i8 %y)  {
1085; CHECK-LABEL: @ugt_swap_or_not_min(
1086; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i8 [[X:%.*]], 0
1087; CHECK-NEXT:    ret i1 [[CMPEQ]]
1088;
1089  %cmp = icmp ult i8 %y, %x
1090  %cmpeq = icmp ne i8 %x, 0
1091  %r = or i1 %cmp, %cmpeq
1092  ret i1 %r
1093}
1094
1095define i1 @ugt_swap_or_not_min_commute(i823 %x, i823 %y)  {
1096; CHECK-LABEL: @ugt_swap_or_not_min_commute(
1097; CHECK-NEXT:    [[CMPEQ:%.*]] = icmp ne i823 [[X:%.*]], 0
1098; CHECK-NEXT:    ret i1 [[CMPEQ]]
1099;
1100  %cmp = icmp ult i823 %y, %x
1101  %cmpeq = icmp ne i823 %x, 0
1102  %r = or i1 %cmpeq, %cmp
1103  ret i1 %r
1104}
1105