Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / InstCombine / icmp-shr-lt-gt.ll
blob1b8efe4351c6dcc274245cf2b800bca7645d7a7c
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=instcombine -S | FileCheck %s
4 define i1 @lshrugt_01_00(i4 %x) {
5 ; CHECK-LABEL: @lshrugt_01_00(
6 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 1
7 ; CHECK-NEXT:    ret i1 [[C]]
9   %s = lshr i4 %x, 1
10   %c = icmp ugt i4 %s, 0
11   ret i1 %c
14 define i1 @lshrugt_01_01(i4 %x) {
15 ; CHECK-LABEL: @lshrugt_01_01(
16 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 3
17 ; CHECK-NEXT:    ret i1 [[C]]
19   %s = lshr i4 %x, 1
20   %c = icmp ugt i4 %s, 1
21   ret i1 %c
24 define i1 @lshrugt_01_02(i4 %x) {
25 ; CHECK-LABEL: @lshrugt_01_02(
26 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 5
27 ; CHECK-NEXT:    ret i1 [[C]]
29   %s = lshr i4 %x, 1
30   %c = icmp ugt i4 %s, 2
31   ret i1 %c
34 define i1 @lshrugt_01_03(i4 %x) {
35 ; CHECK-LABEL: @lshrugt_01_03(
36 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
37 ; CHECK-NEXT:    ret i1 [[C]]
39   %s = lshr i4 %x, 1
40   %c = icmp ugt i4 %s, 3
41   ret i1 %c
44 define i1 @lshrugt_01_04(i4 %x) {
45 ; CHECK-LABEL: @lshrugt_01_04(
46 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -7
47 ; CHECK-NEXT:    ret i1 [[C]]
49   %s = lshr i4 %x, 1
50   %c = icmp ugt i4 %s, 4
51   ret i1 %c
54 define i1 @lshrugt_01_05(i4 %x) {
55 ; CHECK-LABEL: @lshrugt_01_05(
56 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -5
57 ; CHECK-NEXT:    ret i1 [[C]]
59   %s = lshr i4 %x, 1
60   %c = icmp ugt i4 %s, 5
61   ret i1 %c
64 define i1 @lshrugt_01_06(i4 %x) {
65 ; CHECK-LABEL: @lshrugt_01_06(
66 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -3
67 ; CHECK-NEXT:    ret i1 [[C]]
69   %s = lshr i4 %x, 1
70   %c = icmp ugt i4 %s, 6
71   ret i1 %c
74 define i1 @lshrugt_01_07(i4 %x) {
75 ; CHECK-LABEL: @lshrugt_01_07(
76 ; CHECK-NEXT:    ret i1 false
78   %s = lshr i4 %x, 1
79   %c = icmp ugt i4 %s, 7
80   ret i1 %c
83 define i1 @lshrugt_01_08(i4 %x) {
84 ; CHECK-LABEL: @lshrugt_01_08(
85 ; CHECK-NEXT:    ret i1 false
87   %s = lshr i4 %x, 1
88   %c = icmp ugt i4 %s, 8
89   ret i1 %c
92 define i1 @lshrugt_01_09(i4 %x) {
93 ; CHECK-LABEL: @lshrugt_01_09(
94 ; CHECK-NEXT:    ret i1 false
96   %s = lshr i4 %x, 1
97   %c = icmp ugt i4 %s, 9
98   ret i1 %c
101 define i1 @lshrugt_01_10(i4 %x) {
102 ; CHECK-LABEL: @lshrugt_01_10(
103 ; CHECK-NEXT:    ret i1 false
105   %s = lshr i4 %x, 1
106   %c = icmp ugt i4 %s, 10
107   ret i1 %c
110 define i1 @lshrugt_01_11(i4 %x) {
111 ; CHECK-LABEL: @lshrugt_01_11(
112 ; CHECK-NEXT:    ret i1 false
114   %s = lshr i4 %x, 1
115   %c = icmp ugt i4 %s, 11
116   ret i1 %c
119 define i1 @lshrugt_01_12(i4 %x) {
120 ; CHECK-LABEL: @lshrugt_01_12(
121 ; CHECK-NEXT:    ret i1 false
123   %s = lshr i4 %x, 1
124   %c = icmp ugt i4 %s, 12
125   ret i1 %c
128 define i1 @lshrugt_01_13(i4 %x) {
129 ; CHECK-LABEL: @lshrugt_01_13(
130 ; CHECK-NEXT:    ret i1 false
132   %s = lshr i4 %x, 1
133   %c = icmp ugt i4 %s, 13
134   ret i1 %c
137 define i1 @lshrugt_01_14(i4 %x) {
138 ; CHECK-LABEL: @lshrugt_01_14(
139 ; CHECK-NEXT:    ret i1 false
141   %s = lshr i4 %x, 1
142   %c = icmp ugt i4 %s, 14
143   ret i1 %c
146 define i1 @lshrugt_01_15(i4 %x) {
147 ; CHECK-LABEL: @lshrugt_01_15(
148 ; CHECK-NEXT:    ret i1 false
150   %s = lshr i4 %x, 1
151   %c = icmp ugt i4 %s, 15
152   ret i1 %c
155 define i1 @lshrugt_02_00(i4 %x) {
156 ; CHECK-LABEL: @lshrugt_02_00(
157 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 3
158 ; CHECK-NEXT:    ret i1 [[C]]
160   %s = lshr i4 %x, 2
161   %c = icmp ugt i4 %s, 0
162   ret i1 %c
165 define i1 @lshrugt_02_01(i4 %x) {
166 ; CHECK-LABEL: @lshrugt_02_01(
167 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
168 ; CHECK-NEXT:    ret i1 [[C]]
170   %s = lshr i4 %x, 2
171   %c = icmp ugt i4 %s, 1
172   ret i1 %c
175 define i1 @lshrugt_02_02(i4 %x) {
176 ; CHECK-LABEL: @lshrugt_02_02(
177 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -5
178 ; CHECK-NEXT:    ret i1 [[C]]
180   %s = lshr i4 %x, 2
181   %c = icmp ugt i4 %s, 2
182   ret i1 %c
185 define i1 @lshrugt_02_03(i4 %x) {
186 ; CHECK-LABEL: @lshrugt_02_03(
187 ; CHECK-NEXT:    ret i1 false
189   %s = lshr i4 %x, 2
190   %c = icmp ugt i4 %s, 3
191   ret i1 %c
194 define i1 @lshrugt_02_04(i4 %x) {
195 ; CHECK-LABEL: @lshrugt_02_04(
196 ; CHECK-NEXT:    ret i1 false
198   %s = lshr i4 %x, 2
199   %c = icmp ugt i4 %s, 4
200   ret i1 %c
203 define i1 @lshrugt_02_05(i4 %x) {
204 ; CHECK-LABEL: @lshrugt_02_05(
205 ; CHECK-NEXT:    ret i1 false
207   %s = lshr i4 %x, 2
208   %c = icmp ugt i4 %s, 5
209   ret i1 %c
212 define i1 @lshrugt_02_06(i4 %x) {
213 ; CHECK-LABEL: @lshrugt_02_06(
214 ; CHECK-NEXT:    ret i1 false
216   %s = lshr i4 %x, 2
217   %c = icmp ugt i4 %s, 6
218   ret i1 %c
221 define i1 @lshrugt_02_07(i4 %x) {
222 ; CHECK-LABEL: @lshrugt_02_07(
223 ; CHECK-NEXT:    ret i1 false
225   %s = lshr i4 %x, 2
226   %c = icmp ugt i4 %s, 7
227   ret i1 %c
230 define i1 @lshrugt_02_08(i4 %x) {
231 ; CHECK-LABEL: @lshrugt_02_08(
232 ; CHECK-NEXT:    ret i1 false
234   %s = lshr i4 %x, 2
235   %c = icmp ugt i4 %s, 8
236   ret i1 %c
239 define i1 @lshrugt_02_09(i4 %x) {
240 ; CHECK-LABEL: @lshrugt_02_09(
241 ; CHECK-NEXT:    ret i1 false
243   %s = lshr i4 %x, 2
244   %c = icmp ugt i4 %s, 9
245   ret i1 %c
248 define i1 @lshrugt_02_10(i4 %x) {
249 ; CHECK-LABEL: @lshrugt_02_10(
250 ; CHECK-NEXT:    ret i1 false
252   %s = lshr i4 %x, 2
253   %c = icmp ugt i4 %s, 10
254   ret i1 %c
257 define i1 @lshrugt_02_11(i4 %x) {
258 ; CHECK-LABEL: @lshrugt_02_11(
259 ; CHECK-NEXT:    ret i1 false
261   %s = lshr i4 %x, 2
262   %c = icmp ugt i4 %s, 11
263   ret i1 %c
266 define i1 @lshrugt_02_12(i4 %x) {
267 ; CHECK-LABEL: @lshrugt_02_12(
268 ; CHECK-NEXT:    ret i1 false
270   %s = lshr i4 %x, 2
271   %c = icmp ugt i4 %s, 12
272   ret i1 %c
275 define i1 @lshrugt_02_13(i4 %x) {
276 ; CHECK-LABEL: @lshrugt_02_13(
277 ; CHECK-NEXT:    ret i1 false
279   %s = lshr i4 %x, 2
280   %c = icmp ugt i4 %s, 13
281   ret i1 %c
284 define i1 @lshrugt_02_14(i4 %x) {
285 ; CHECK-LABEL: @lshrugt_02_14(
286 ; CHECK-NEXT:    ret i1 false
288   %s = lshr i4 %x, 2
289   %c = icmp ugt i4 %s, 14
290   ret i1 %c
293 define i1 @lshrugt_02_15(i4 %x) {
294 ; CHECK-LABEL: @lshrugt_02_15(
295 ; CHECK-NEXT:    ret i1 false
297   %s = lshr i4 %x, 2
298   %c = icmp ugt i4 %s, 15
299   ret i1 %c
302 define i1 @lshrugt_03_00(i4 %x) {
303 ; CHECK-LABEL: @lshrugt_03_00(
304 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
305 ; CHECK-NEXT:    ret i1 [[C]]
307   %s = lshr i4 %x, 3
308   %c = icmp ugt i4 %s, 0
309   ret i1 %c
312 define i1 @lshrugt_03_01(i4 %x) {
313 ; CHECK-LABEL: @lshrugt_03_01(
314 ; CHECK-NEXT:    ret i1 false
316   %s = lshr i4 %x, 3
317   %c = icmp ugt i4 %s, 1
318   ret i1 %c
321 define i1 @lshrugt_03_02(i4 %x) {
322 ; CHECK-LABEL: @lshrugt_03_02(
323 ; CHECK-NEXT:    ret i1 false
325   %s = lshr i4 %x, 3
326   %c = icmp ugt i4 %s, 2
327   ret i1 %c
330 define i1 @lshrugt_03_03(i4 %x) {
331 ; CHECK-LABEL: @lshrugt_03_03(
332 ; CHECK-NEXT:    ret i1 false
334   %s = lshr i4 %x, 3
335   %c = icmp ugt i4 %s, 3
336   ret i1 %c
339 define i1 @lshrugt_03_04(i4 %x) {
340 ; CHECK-LABEL: @lshrugt_03_04(
341 ; CHECK-NEXT:    ret i1 false
343   %s = lshr i4 %x, 3
344   %c = icmp ugt i4 %s, 4
345   ret i1 %c
348 define i1 @lshrugt_03_05(i4 %x) {
349 ; CHECK-LABEL: @lshrugt_03_05(
350 ; CHECK-NEXT:    ret i1 false
352   %s = lshr i4 %x, 3
353   %c = icmp ugt i4 %s, 5
354   ret i1 %c
357 define i1 @lshrugt_03_06(i4 %x) {
358 ; CHECK-LABEL: @lshrugt_03_06(
359 ; CHECK-NEXT:    ret i1 false
361   %s = lshr i4 %x, 3
362   %c = icmp ugt i4 %s, 6
363   ret i1 %c
366 define i1 @lshrugt_03_07(i4 %x) {
367 ; CHECK-LABEL: @lshrugt_03_07(
368 ; CHECK-NEXT:    ret i1 false
370   %s = lshr i4 %x, 3
371   %c = icmp ugt i4 %s, 7
372   ret i1 %c
375 define i1 @lshrugt_03_08(i4 %x) {
376 ; CHECK-LABEL: @lshrugt_03_08(
377 ; CHECK-NEXT:    ret i1 false
379   %s = lshr i4 %x, 3
380   %c = icmp ugt i4 %s, 8
381   ret i1 %c
384 define i1 @lshrugt_03_09(i4 %x) {
385 ; CHECK-LABEL: @lshrugt_03_09(
386 ; CHECK-NEXT:    ret i1 false
388   %s = lshr i4 %x, 3
389   %c = icmp ugt i4 %s, 9
390   ret i1 %c
393 define i1 @lshrugt_03_10(i4 %x) {
394 ; CHECK-LABEL: @lshrugt_03_10(
395 ; CHECK-NEXT:    ret i1 false
397   %s = lshr i4 %x, 3
398   %c = icmp ugt i4 %s, 10
399   ret i1 %c
402 define i1 @lshrugt_03_11(i4 %x) {
403 ; CHECK-LABEL: @lshrugt_03_11(
404 ; CHECK-NEXT:    ret i1 false
406   %s = lshr i4 %x, 3
407   %c = icmp ugt i4 %s, 11
408   ret i1 %c
411 define i1 @lshrugt_03_12(i4 %x) {
412 ; CHECK-LABEL: @lshrugt_03_12(
413 ; CHECK-NEXT:    ret i1 false
415   %s = lshr i4 %x, 3
416   %c = icmp ugt i4 %s, 12
417   ret i1 %c
420 define i1 @lshrugt_03_13(i4 %x) {
421 ; CHECK-LABEL: @lshrugt_03_13(
422 ; CHECK-NEXT:    ret i1 false
424   %s = lshr i4 %x, 3
425   %c = icmp ugt i4 %s, 13
426   ret i1 %c
429 define i1 @lshrugt_03_14(i4 %x) {
430 ; CHECK-LABEL: @lshrugt_03_14(
431 ; CHECK-NEXT:    ret i1 false
433   %s = lshr i4 %x, 3
434   %c = icmp ugt i4 %s, 14
435   ret i1 %c
438 define i1 @lshrugt_03_15(i4 %x) {
439 ; CHECK-LABEL: @lshrugt_03_15(
440 ; CHECK-NEXT:    ret i1 false
442   %s = lshr i4 %x, 3
443   %c = icmp ugt i4 %s, 15
444   ret i1 %c
447 define i1 @lshrult_01_00(i4 %x) {
448 ; CHECK-LABEL: @lshrult_01_00(
449 ; CHECK-NEXT:    ret i1 false
451   %s = lshr i4 %x, 1
452   %c = icmp ult i4 %s, 0
453   ret i1 %c
456 define i1 @lshrult_01_01(i4 %x) {
457 ; CHECK-LABEL: @lshrult_01_01(
458 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 2
459 ; CHECK-NEXT:    ret i1 [[C]]
461   %s = lshr i4 %x, 1
462   %c = icmp ult i4 %s, 1
463   ret i1 %c
466 define i1 @lshrult_01_02(i4 %x) {
467 ; CHECK-LABEL: @lshrult_01_02(
468 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 4
469 ; CHECK-NEXT:    ret i1 [[C]]
471   %s = lshr i4 %x, 1
472   %c = icmp ult i4 %s, 2
473   ret i1 %c
476 define i1 @lshrult_01_03(i4 %x) {
477 ; CHECK-LABEL: @lshrult_01_03(
478 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 6
479 ; CHECK-NEXT:    ret i1 [[C]]
481   %s = lshr i4 %x, 1
482   %c = icmp ult i4 %s, 3
483   ret i1 %c
486 define i1 @lshrult_01_04(i4 %x) {
487 ; CHECK-LABEL: @lshrult_01_04(
488 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
489 ; CHECK-NEXT:    ret i1 [[C]]
491   %s = lshr i4 %x, 1
492   %c = icmp ult i4 %s, 4
493   ret i1 %c
496 define i1 @lshrult_01_05(i4 %x) {
497 ; CHECK-LABEL: @lshrult_01_05(
498 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -6
499 ; CHECK-NEXT:    ret i1 [[C]]
501   %s = lshr i4 %x, 1
502   %c = icmp ult i4 %s, 5
503   ret i1 %c
506 define i1 @lshrult_01_06(i4 %x) {
507 ; CHECK-LABEL: @lshrult_01_06(
508 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -4
509 ; CHECK-NEXT:    ret i1 [[C]]
511   %s = lshr i4 %x, 1
512   %c = icmp ult i4 %s, 6
513   ret i1 %c
516 define i1 @lshrult_01_07(i4 %x) {
517 ; CHECK-LABEL: @lshrult_01_07(
518 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -2
519 ; CHECK-NEXT:    ret i1 [[C]]
521   %s = lshr i4 %x, 1
522   %c = icmp ult i4 %s, 7
523   ret i1 %c
526 define i1 @lshrult_01_08(i4 %x) {
527 ; CHECK-LABEL: @lshrult_01_08(
528 ; CHECK-NEXT:    ret i1 true
530   %s = lshr i4 %x, 1
531   %c = icmp ult i4 %s, 8
532   ret i1 %c
535 define i1 @lshrult_01_09(i4 %x) {
536 ; CHECK-LABEL: @lshrult_01_09(
537 ; CHECK-NEXT:    ret i1 true
539   %s = lshr i4 %x, 1
540   %c = icmp ult i4 %s, 9
541   ret i1 %c
544 define i1 @lshrult_01_10(i4 %x) {
545 ; CHECK-LABEL: @lshrult_01_10(
546 ; CHECK-NEXT:    ret i1 true
548   %s = lshr i4 %x, 1
549   %c = icmp ult i4 %s, 10
550   ret i1 %c
553 define i1 @lshrult_01_11(i4 %x) {
554 ; CHECK-LABEL: @lshrult_01_11(
555 ; CHECK-NEXT:    ret i1 true
557   %s = lshr i4 %x, 1
558   %c = icmp ult i4 %s, 11
559   ret i1 %c
562 define i1 @lshrult_01_12(i4 %x) {
563 ; CHECK-LABEL: @lshrult_01_12(
564 ; CHECK-NEXT:    ret i1 true
566   %s = lshr i4 %x, 1
567   %c = icmp ult i4 %s, 12
568   ret i1 %c
571 define i1 @lshrult_01_13(i4 %x) {
572 ; CHECK-LABEL: @lshrult_01_13(
573 ; CHECK-NEXT:    ret i1 true
575   %s = lshr i4 %x, 1
576   %c = icmp ult i4 %s, 13
577   ret i1 %c
580 define i1 @lshrult_01_14(i4 %x) {
581 ; CHECK-LABEL: @lshrult_01_14(
582 ; CHECK-NEXT:    ret i1 true
584   %s = lshr i4 %x, 1
585   %c = icmp ult i4 %s, 14
586   ret i1 %c
589 define i1 @lshrult_01_15(i4 %x) {
590 ; CHECK-LABEL: @lshrult_01_15(
591 ; CHECK-NEXT:    ret i1 true
593   %s = lshr i4 %x, 1
594   %c = icmp ult i4 %s, 15
595   ret i1 %c
598 define i1 @lshrult_02_00(i4 %x) {
599 ; CHECK-LABEL: @lshrult_02_00(
600 ; CHECK-NEXT:    ret i1 false
602   %s = lshr i4 %x, 2
603   %c = icmp ult i4 %s, 0
604   ret i1 %c
607 define i1 @lshrult_02_01(i4 %x) {
608 ; CHECK-LABEL: @lshrult_02_01(
609 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 4
610 ; CHECK-NEXT:    ret i1 [[C]]
612   %s = lshr i4 %x, 2
613   %c = icmp ult i4 %s, 1
614   ret i1 %c
617 define i1 @lshrult_02_02(i4 %x) {
618 ; CHECK-LABEL: @lshrult_02_02(
619 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
620 ; CHECK-NEXT:    ret i1 [[C]]
622   %s = lshr i4 %x, 2
623   %c = icmp ult i4 %s, 2
624   ret i1 %c
627 define i1 @lshrult_02_03(i4 %x) {
628 ; CHECK-LABEL: @lshrult_02_03(
629 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -4
630 ; CHECK-NEXT:    ret i1 [[C]]
632   %s = lshr i4 %x, 2
633   %c = icmp ult i4 %s, 3
634   ret i1 %c
637 define i1 @lshrult_02_04(i4 %x) {
638 ; CHECK-LABEL: @lshrult_02_04(
639 ; CHECK-NEXT:    ret i1 true
641   %s = lshr i4 %x, 2
642   %c = icmp ult i4 %s, 4
643   ret i1 %c
646 define i1 @lshrult_02_05(i4 %x) {
647 ; CHECK-LABEL: @lshrult_02_05(
648 ; CHECK-NEXT:    ret i1 true
650   %s = lshr i4 %x, 2
651   %c = icmp ult i4 %s, 5
652   ret i1 %c
655 define i1 @lshrult_02_06(i4 %x) {
656 ; CHECK-LABEL: @lshrult_02_06(
657 ; CHECK-NEXT:    ret i1 true
659   %s = lshr i4 %x, 2
660   %c = icmp ult i4 %s, 6
661   ret i1 %c
664 define i1 @lshrult_02_07(i4 %x) {
665 ; CHECK-LABEL: @lshrult_02_07(
666 ; CHECK-NEXT:    ret i1 true
668   %s = lshr i4 %x, 2
669   %c = icmp ult i4 %s, 7
670   ret i1 %c
673 define i1 @lshrult_02_08(i4 %x) {
674 ; CHECK-LABEL: @lshrult_02_08(
675 ; CHECK-NEXT:    ret i1 true
677   %s = lshr i4 %x, 2
678   %c = icmp ult i4 %s, 8
679   ret i1 %c
682 define i1 @lshrult_02_09(i4 %x) {
683 ; CHECK-LABEL: @lshrult_02_09(
684 ; CHECK-NEXT:    ret i1 true
686   %s = lshr i4 %x, 2
687   %c = icmp ult i4 %s, 9
688   ret i1 %c
691 define i1 @lshrult_02_10(i4 %x) {
692 ; CHECK-LABEL: @lshrult_02_10(
693 ; CHECK-NEXT:    ret i1 true
695   %s = lshr i4 %x, 2
696   %c = icmp ult i4 %s, 10
697   ret i1 %c
700 define i1 @lshrult_02_11(i4 %x) {
701 ; CHECK-LABEL: @lshrult_02_11(
702 ; CHECK-NEXT:    ret i1 true
704   %s = lshr i4 %x, 2
705   %c = icmp ult i4 %s, 11
706   ret i1 %c
709 define i1 @lshrult_02_12(i4 %x) {
710 ; CHECK-LABEL: @lshrult_02_12(
711 ; CHECK-NEXT:    ret i1 true
713   %s = lshr i4 %x, 2
714   %c = icmp ult i4 %s, 12
715   ret i1 %c
718 define i1 @lshrult_02_13(i4 %x) {
719 ; CHECK-LABEL: @lshrult_02_13(
720 ; CHECK-NEXT:    ret i1 true
722   %s = lshr i4 %x, 2
723   %c = icmp ult i4 %s, 13
724   ret i1 %c
727 define i1 @lshrult_02_14(i4 %x) {
728 ; CHECK-LABEL: @lshrult_02_14(
729 ; CHECK-NEXT:    ret i1 true
731   %s = lshr i4 %x, 2
732   %c = icmp ult i4 %s, 14
733   ret i1 %c
736 define i1 @lshrult_02_15(i4 %x) {
737 ; CHECK-LABEL: @lshrult_02_15(
738 ; CHECK-NEXT:    ret i1 true
740   %s = lshr i4 %x, 2
741   %c = icmp ult i4 %s, 15
742   ret i1 %c
745 define i1 @lshrult_03_00(i4 %x) {
746 ; CHECK-LABEL: @lshrult_03_00(
747 ; CHECK-NEXT:    ret i1 false
749   %s = lshr i4 %x, 3
750   %c = icmp ult i4 %s, 0
751   ret i1 %c
754 define i1 @lshrult_03_01(i4 %x) {
755 ; CHECK-LABEL: @lshrult_03_01(
756 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
757 ; CHECK-NEXT:    ret i1 [[C]]
759   %s = lshr i4 %x, 3
760   %c = icmp ult i4 %s, 1
761   ret i1 %c
764 define i1 @lshrult_03_02(i4 %x) {
765 ; CHECK-LABEL: @lshrult_03_02(
766 ; CHECK-NEXT:    ret i1 true
768   %s = lshr i4 %x, 3
769   %c = icmp ult i4 %s, 2
770   ret i1 %c
773 define i1 @lshrult_03_03(i4 %x) {
774 ; CHECK-LABEL: @lshrult_03_03(
775 ; CHECK-NEXT:    ret i1 true
777   %s = lshr i4 %x, 3
778   %c = icmp ult i4 %s, 3
779   ret i1 %c
782 define i1 @lshrult_03_04(i4 %x) {
783 ; CHECK-LABEL: @lshrult_03_04(
784 ; CHECK-NEXT:    ret i1 true
786   %s = lshr i4 %x, 3
787   %c = icmp ult i4 %s, 4
788   ret i1 %c
791 define i1 @lshrult_03_05(i4 %x) {
792 ; CHECK-LABEL: @lshrult_03_05(
793 ; CHECK-NEXT:    ret i1 true
795   %s = lshr i4 %x, 3
796   %c = icmp ult i4 %s, 5
797   ret i1 %c
800 define i1 @lshrult_03_06(i4 %x) {
801 ; CHECK-LABEL: @lshrult_03_06(
802 ; CHECK-NEXT:    ret i1 true
804   %s = lshr i4 %x, 3
805   %c = icmp ult i4 %s, 6
806   ret i1 %c
809 define i1 @lshrult_03_07(i4 %x) {
810 ; CHECK-LABEL: @lshrult_03_07(
811 ; CHECK-NEXT:    ret i1 true
813   %s = lshr i4 %x, 3
814   %c = icmp ult i4 %s, 7
815   ret i1 %c
818 define i1 @lshrult_03_08(i4 %x) {
819 ; CHECK-LABEL: @lshrult_03_08(
820 ; CHECK-NEXT:    ret i1 true
822   %s = lshr i4 %x, 3
823   %c = icmp ult i4 %s, 8
824   ret i1 %c
827 define i1 @lshrult_03_09(i4 %x) {
828 ; CHECK-LABEL: @lshrult_03_09(
829 ; CHECK-NEXT:    ret i1 true
831   %s = lshr i4 %x, 3
832   %c = icmp ult i4 %s, 9
833   ret i1 %c
836 define i1 @lshrult_03_10(i4 %x) {
837 ; CHECK-LABEL: @lshrult_03_10(
838 ; CHECK-NEXT:    ret i1 true
840   %s = lshr i4 %x, 3
841   %c = icmp ult i4 %s, 10
842   ret i1 %c
845 define i1 @lshrult_03_11(i4 %x) {
846 ; CHECK-LABEL: @lshrult_03_11(
847 ; CHECK-NEXT:    ret i1 true
849   %s = lshr i4 %x, 3
850   %c = icmp ult i4 %s, 11
851   ret i1 %c
854 define i1 @lshrult_03_12(i4 %x) {
855 ; CHECK-LABEL: @lshrult_03_12(
856 ; CHECK-NEXT:    ret i1 true
858   %s = lshr i4 %x, 3
859   %c = icmp ult i4 %s, 12
860   ret i1 %c
863 define i1 @lshrult_03_13(i4 %x) {
864 ; CHECK-LABEL: @lshrult_03_13(
865 ; CHECK-NEXT:    ret i1 true
867   %s = lshr i4 %x, 3
868   %c = icmp ult i4 %s, 13
869   ret i1 %c
872 define i1 @lshrult_03_14(i4 %x) {
873 ; CHECK-LABEL: @lshrult_03_14(
874 ; CHECK-NEXT:    ret i1 true
876   %s = lshr i4 %x, 3
877   %c = icmp ult i4 %s, 14
878   ret i1 %c
881 define i1 @lshrult_03_15(i4 %x) {
882 ; CHECK-LABEL: @lshrult_03_15(
883 ; CHECK-NEXT:    ret i1 true
885   %s = lshr i4 %x, 3
886   %c = icmp ult i4 %s, 15
887   ret i1 %c
890 define i1 @ashrsgt_01_00(i4 %x) {
891 ; CHECK-LABEL: @ashrsgt_01_00(
892 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 1
893 ; CHECK-NEXT:    ret i1 [[C]]
895   %s = ashr i4 %x, 1
896   %c = icmp sgt i4 %s, 0
897   ret i1 %c
900 define i1 @ashrsgt_01_00_multiuse(i4 %x, ptr %p) {
901 ; CHECK-LABEL: @ashrsgt_01_00_multiuse(
902 ; CHECK-NEXT:    [[S:%.*]] = ashr i4 [[X:%.*]], 1
903 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[S]], 0
904 ; CHECK-NEXT:    store i4 [[S]], ptr [[P:%.*]], align 1
905 ; CHECK-NEXT:    ret i1 [[C]]
907   %s = ashr i4 %x, 1
908   %c = icmp sgt i4 %s, 0
909   store i4 %s, ptr %p
910   ret i1 %c
913 define i1 @ashrsgt_01_01(i4 %x) {
914 ; CHECK-LABEL: @ashrsgt_01_01(
915 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 3
916 ; CHECK-NEXT:    ret i1 [[C]]
918   %s = ashr i4 %x, 1
919   %c = icmp sgt i4 %s, 1
920   ret i1 %c
923 define i1 @ashrsgt_01_02(i4 %x) {
924 ; CHECK-LABEL: @ashrsgt_01_02(
925 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 5
926 ; CHECK-NEXT:    ret i1 [[C]]
928   %s = ashr i4 %x, 1
929   %c = icmp sgt i4 %s, 2
930   ret i1 %c
933 define i1 @ashrsgt_01_03(i4 %x) {
934 ; CHECK-LABEL: @ashrsgt_01_03(
935 ; CHECK-NEXT:    ret i1 false
937   %s = ashr i4 %x, 1
938   %c = icmp sgt i4 %s, 3
939   ret i1 %c
942 define i1 @ashrsgt_01_04(i4 %x) {
943 ; CHECK-LABEL: @ashrsgt_01_04(
944 ; CHECK-NEXT:    ret i1 false
946   %s = ashr i4 %x, 1
947   %c = icmp sgt i4 %s, 4
948   ret i1 %c
951 define i1 @ashrsgt_01_05(i4 %x) {
952 ; CHECK-LABEL: @ashrsgt_01_05(
953 ; CHECK-NEXT:    ret i1 false
955   %s = ashr i4 %x, 1
956   %c = icmp sgt i4 %s, 5
957   ret i1 %c
960 define i1 @ashrsgt_01_06(i4 %x) {
961 ; CHECK-LABEL: @ashrsgt_01_06(
962 ; CHECK-NEXT:    ret i1 false
964   %s = ashr i4 %x, 1
965   %c = icmp sgt i4 %s, 6
966   ret i1 %c
969 define i1 @ashrsgt_01_07(i4 %x) {
970 ; CHECK-LABEL: @ashrsgt_01_07(
971 ; CHECK-NEXT:    ret i1 false
973   %s = ashr i4 %x, 1
974   %c = icmp sgt i4 %s, 7
975   ret i1 %c
978 define i1 @ashrsgt_01_08(i4 %x) {
979 ; CHECK-LABEL: @ashrsgt_01_08(
980 ; CHECK-NEXT:    ret i1 true
982   %s = ashr i4 %x, 1
983   %c = icmp sgt i4 %s, 8
984   ret i1 %c
987 define i1 @ashrsgt_01_09(i4 %x) {
988 ; CHECK-LABEL: @ashrsgt_01_09(
989 ; CHECK-NEXT:    ret i1 true
991   %s = ashr i4 %x, 1
992   %c = icmp sgt i4 %s, 9
993   ret i1 %c
996 define i1 @ashrsgt_01_10(i4 %x) {
997 ; CHECK-LABEL: @ashrsgt_01_10(
998 ; CHECK-NEXT:    ret i1 true
1000   %s = ashr i4 %x, 1
1001   %c = icmp sgt i4 %s, 10
1002   ret i1 %c
1005 define i1 @ashrsgt_01_11(i4 %x) {
1006 ; CHECK-LABEL: @ashrsgt_01_11(
1007 ; CHECK-NEXT:    ret i1 true
1009   %s = ashr i4 %x, 1
1010   %c = icmp sgt i4 %s, 11
1011   ret i1 %c
1014 define i1 @ashrsgt_01_12(i4 %x) {
1015 ; CHECK-LABEL: @ashrsgt_01_12(
1016 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -7
1017 ; CHECK-NEXT:    ret i1 [[C]]
1019   %s = ashr i4 %x, 1
1020   %c = icmp sgt i4 %s, 12
1021   ret i1 %c
1024 define i1 @ashrsgt_01_13(i4 %x) {
1025 ; CHECK-LABEL: @ashrsgt_01_13(
1026 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -5
1027 ; CHECK-NEXT:    ret i1 [[C]]
1029   %s = ashr i4 %x, 1
1030   %c = icmp sgt i4 %s, 13
1031   ret i1 %c
1034 define i1 @ashrsgt_01_14(i4 %x) {
1035 ; CHECK-LABEL: @ashrsgt_01_14(
1036 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -3
1037 ; CHECK-NEXT:    ret i1 [[C]]
1039   %s = ashr i4 %x, 1
1040   %c = icmp sgt i4 %s, 14
1041   ret i1 %c
1044 define i1 @ashrsgt_01_15(i4 %x) {
1045 ; CHECK-LABEL: @ashrsgt_01_15(
1046 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
1047 ; CHECK-NEXT:    ret i1 [[C]]
1049   %s = ashr i4 %x, 1
1050   %c = icmp sgt i4 %s, 15
1051   ret i1 %c
1054 define i1 @ashrsgt_02_00(i4 %x) {
1055 ; CHECK-LABEL: @ashrsgt_02_00(
1056 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 3
1057 ; CHECK-NEXT:    ret i1 [[C]]
1059   %s = ashr i4 %x, 2
1060   %c = icmp sgt i4 %s, 0
1061   ret i1 %c
1064 define i1 @ashrsgt_02_01(i4 %x) {
1065 ; CHECK-LABEL: @ashrsgt_02_01(
1066 ; CHECK-NEXT:    ret i1 false
1068   %s = ashr i4 %x, 2
1069   %c = icmp sgt i4 %s, 1
1070   ret i1 %c
1073 define i1 @ashrsgt_02_02(i4 %x) {
1074 ; CHECK-LABEL: @ashrsgt_02_02(
1075 ; CHECK-NEXT:    ret i1 false
1077   %s = ashr i4 %x, 2
1078   %c = icmp sgt i4 %s, 2
1079   ret i1 %c
1082 define i1 @ashrsgt_02_03(i4 %x) {
1083 ; CHECK-LABEL: @ashrsgt_02_03(
1084 ; CHECK-NEXT:    ret i1 false
1086   %s = ashr i4 %x, 2
1087   %c = icmp sgt i4 %s, 3
1088   ret i1 %c
1091 define i1 @ashrsgt_02_04(i4 %x) {
1092 ; CHECK-LABEL: @ashrsgt_02_04(
1093 ; CHECK-NEXT:    ret i1 false
1095   %s = ashr i4 %x, 2
1096   %c = icmp sgt i4 %s, 4
1097   ret i1 %c
1100 define i1 @ashrsgt_02_05(i4 %x) {
1101 ; CHECK-LABEL: @ashrsgt_02_05(
1102 ; CHECK-NEXT:    ret i1 false
1104   %s = ashr i4 %x, 2
1105   %c = icmp sgt i4 %s, 5
1106   ret i1 %c
1109 define i1 @ashrsgt_02_06(i4 %x) {
1110 ; CHECK-LABEL: @ashrsgt_02_06(
1111 ; CHECK-NEXT:    ret i1 false
1113   %s = ashr i4 %x, 2
1114   %c = icmp sgt i4 %s, 6
1115   ret i1 %c
1118 define i1 @ashrsgt_02_07(i4 %x) {
1119 ; CHECK-LABEL: @ashrsgt_02_07(
1120 ; CHECK-NEXT:    ret i1 false
1122   %s = ashr i4 %x, 2
1123   %c = icmp sgt i4 %s, 7
1124   ret i1 %c
1127 define i1 @ashrsgt_02_08(i4 %x) {
1128 ; CHECK-LABEL: @ashrsgt_02_08(
1129 ; CHECK-NEXT:    ret i1 true
1131   %s = ashr i4 %x, 2
1132   %c = icmp sgt i4 %s, 8
1133   ret i1 %c
1136 define i1 @ashrsgt_02_09(i4 %x) {
1137 ; CHECK-LABEL: @ashrsgt_02_09(
1138 ; CHECK-NEXT:    ret i1 true
1140   %s = ashr i4 %x, 2
1141   %c = icmp sgt i4 %s, 9
1142   ret i1 %c
1145 define i1 @ashrsgt_02_10(i4 %x) {
1146 ; CHECK-LABEL: @ashrsgt_02_10(
1147 ; CHECK-NEXT:    ret i1 true
1149   %s = ashr i4 %x, 2
1150   %c = icmp sgt i4 %s, 10
1151   ret i1 %c
1154 define i1 @ashrsgt_02_11(i4 %x) {
1155 ; CHECK-LABEL: @ashrsgt_02_11(
1156 ; CHECK-NEXT:    ret i1 true
1158   %s = ashr i4 %x, 2
1159   %c = icmp sgt i4 %s, 11
1160   ret i1 %c
1163 define i1 @ashrsgt_02_12(i4 %x) {
1164 ; CHECK-LABEL: @ashrsgt_02_12(
1165 ; CHECK-NEXT:    ret i1 true
1167   %s = ashr i4 %x, 2
1168   %c = icmp sgt i4 %s, 12
1169   ret i1 %c
1172 define i1 @ashrsgt_02_13(i4 %x) {
1173 ; CHECK-LABEL: @ashrsgt_02_13(
1174 ; CHECK-NEXT:    ret i1 true
1176   %s = ashr i4 %x, 2
1177   %c = icmp sgt i4 %s, 13
1178   ret i1 %c
1181 define i1 @ashrsgt_02_14(i4 %x) {
1182 ; CHECK-LABEL: @ashrsgt_02_14(
1183 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -5
1184 ; CHECK-NEXT:    ret i1 [[C]]
1186   %s = ashr i4 %x, 2
1187   %c = icmp sgt i4 %s, 14
1188   ret i1 %c
1191 define i1 @ashrsgt_02_15(i4 %x) {
1192 ; CHECK-LABEL: @ashrsgt_02_15(
1193 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
1194 ; CHECK-NEXT:    ret i1 [[C]]
1196   %s = ashr i4 %x, 2
1197   %c = icmp sgt i4 %s, 15
1198   ret i1 %c
1201 define i1 @ashrsgt_03_00(i4 %x) {
1202 ; CHECK-LABEL: @ashrsgt_03_00(
1203 ; CHECK-NEXT:    ret i1 false
1205   %s = ashr i4 %x, 3
1206   %c = icmp sgt i4 %s, 0
1207   ret i1 %c
1210 define i1 @ashrsgt_03_01(i4 %x) {
1211 ; CHECK-LABEL: @ashrsgt_03_01(
1212 ; CHECK-NEXT:    ret i1 false
1214   %s = ashr i4 %x, 3
1215   %c = icmp sgt i4 %s, 1
1216   ret i1 %c
1219 define i1 @ashrsgt_03_02(i4 %x) {
1220 ; CHECK-LABEL: @ashrsgt_03_02(
1221 ; CHECK-NEXT:    ret i1 false
1223   %s = ashr i4 %x, 3
1224   %c = icmp sgt i4 %s, 2
1225   ret i1 %c
1228 define i1 @ashrsgt_03_03(i4 %x) {
1229 ; CHECK-LABEL: @ashrsgt_03_03(
1230 ; CHECK-NEXT:    ret i1 false
1232   %s = ashr i4 %x, 3
1233   %c = icmp sgt i4 %s, 3
1234   ret i1 %c
1237 define i1 @ashrsgt_03_04(i4 %x) {
1238 ; CHECK-LABEL: @ashrsgt_03_04(
1239 ; CHECK-NEXT:    ret i1 false
1241   %s = ashr i4 %x, 3
1242   %c = icmp sgt i4 %s, 4
1243   ret i1 %c
1246 define i1 @ashrsgt_03_05(i4 %x) {
1247 ; CHECK-LABEL: @ashrsgt_03_05(
1248 ; CHECK-NEXT:    ret i1 false
1250   %s = ashr i4 %x, 3
1251   %c = icmp sgt i4 %s, 5
1252   ret i1 %c
1255 define i1 @ashrsgt_03_06(i4 %x) {
1256 ; CHECK-LABEL: @ashrsgt_03_06(
1257 ; CHECK-NEXT:    ret i1 false
1259   %s = ashr i4 %x, 3
1260   %c = icmp sgt i4 %s, 6
1261   ret i1 %c
1264 define i1 @ashrsgt_03_07(i4 %x) {
1265 ; CHECK-LABEL: @ashrsgt_03_07(
1266 ; CHECK-NEXT:    ret i1 false
1268   %s = ashr i4 %x, 3
1269   %c = icmp sgt i4 %s, 7
1270   ret i1 %c
1273 define i1 @ashrsgt_03_08(i4 %x) {
1274 ; CHECK-LABEL: @ashrsgt_03_08(
1275 ; CHECK-NEXT:    ret i1 true
1277   %s = ashr i4 %x, 3
1278   %c = icmp sgt i4 %s, 8
1279   ret i1 %c
1282 define i1 @ashrsgt_03_09(i4 %x) {
1283 ; CHECK-LABEL: @ashrsgt_03_09(
1284 ; CHECK-NEXT:    ret i1 true
1286   %s = ashr i4 %x, 3
1287   %c = icmp sgt i4 %s, 9
1288   ret i1 %c
1291 define i1 @ashrsgt_03_10(i4 %x) {
1292 ; CHECK-LABEL: @ashrsgt_03_10(
1293 ; CHECK-NEXT:    ret i1 true
1295   %s = ashr i4 %x, 3
1296   %c = icmp sgt i4 %s, 10
1297   ret i1 %c
1300 define i1 @ashrsgt_03_11(i4 %x) {
1301 ; CHECK-LABEL: @ashrsgt_03_11(
1302 ; CHECK-NEXT:    ret i1 true
1304   %s = ashr i4 %x, 3
1305   %c = icmp sgt i4 %s, 11
1306   ret i1 %c
1309 define i1 @ashrsgt_03_12(i4 %x) {
1310 ; CHECK-LABEL: @ashrsgt_03_12(
1311 ; CHECK-NEXT:    ret i1 true
1313   %s = ashr i4 %x, 3
1314   %c = icmp sgt i4 %s, 12
1315   ret i1 %c
1318 define i1 @ashrsgt_03_13(i4 %x) {
1319 ; CHECK-LABEL: @ashrsgt_03_13(
1320 ; CHECK-NEXT:    ret i1 true
1322   %s = ashr i4 %x, 3
1323   %c = icmp sgt i4 %s, 13
1324   ret i1 %c
1327 define i1 @ashrsgt_03_14(i4 %x) {
1328 ; CHECK-LABEL: @ashrsgt_03_14(
1329 ; CHECK-NEXT:    ret i1 true
1331   %s = ashr i4 %x, 3
1332   %c = icmp sgt i4 %s, 14
1333   ret i1 %c
1336 define i1 @ashrsgt_03_15(i4 %x) {
1337 ; CHECK-LABEL: @ashrsgt_03_15(
1338 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
1339 ; CHECK-NEXT:    ret i1 [[C]]
1341   %s = ashr i4 %x, 3
1342   %c = icmp sgt i4 %s, 15
1343   ret i1 %c
1346 define i1 @ashrslt_01_00(i4 %x) {
1347 ; CHECK-LABEL: @ashrslt_01_00(
1348 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
1349 ; CHECK-NEXT:    ret i1 [[C]]
1351   %s = ashr i4 %x, 1
1352   %c = icmp slt i4 %s, 0
1353   ret i1 %c
1356 define i1 @ashrslt_01_01(i4 %x) {
1357 ; CHECK-LABEL: @ashrslt_01_01(
1358 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 2
1359 ; CHECK-NEXT:    ret i1 [[C]]
1361   %s = ashr i4 %x, 1
1362   %c = icmp slt i4 %s, 1
1363   ret i1 %c
1366 define i1 @ashrslt_01_02(i4 %x) {
1367 ; CHECK-LABEL: @ashrslt_01_02(
1368 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 4
1369 ; CHECK-NEXT:    ret i1 [[C]]
1371   %s = ashr i4 %x, 1
1372   %c = icmp slt i4 %s, 2
1373   ret i1 %c
1376 define i1 @ashrslt_01_03(i4 %x) {
1377 ; CHECK-LABEL: @ashrslt_01_03(
1378 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 6
1379 ; CHECK-NEXT:    ret i1 [[C]]
1381   %s = ashr i4 %x, 1
1382   %c = icmp slt i4 %s, 3
1383   ret i1 %c
1386 define i1 @ashrslt_01_04(i4 %x) {
1387 ; CHECK-LABEL: @ashrslt_01_04(
1388 ; CHECK-NEXT:    ret i1 true
1390   %s = ashr i4 %x, 1
1391   %c = icmp slt i4 %s, 4
1392   ret i1 %c
1395 define i1 @ashrslt_01_05(i4 %x) {
1396 ; CHECK-LABEL: @ashrslt_01_05(
1397 ; CHECK-NEXT:    ret i1 true
1399   %s = ashr i4 %x, 1
1400   %c = icmp slt i4 %s, 5
1401   ret i1 %c
1404 define i1 @ashrslt_01_06(i4 %x) {
1405 ; CHECK-LABEL: @ashrslt_01_06(
1406 ; CHECK-NEXT:    ret i1 true
1408   %s = ashr i4 %x, 1
1409   %c = icmp slt i4 %s, 6
1410   ret i1 %c
1413 define i1 @ashrslt_01_07(i4 %x) {
1414 ; CHECK-LABEL: @ashrslt_01_07(
1415 ; CHECK-NEXT:    ret i1 true
1417   %s = ashr i4 %x, 1
1418   %c = icmp slt i4 %s, 7
1419   ret i1 %c
1422 define i1 @ashrslt_01_08(i4 %x) {
1423 ; CHECK-LABEL: @ashrslt_01_08(
1424 ; CHECK-NEXT:    ret i1 false
1426   %s = ashr i4 %x, 1
1427   %c = icmp slt i4 %s, 8
1428   ret i1 %c
1431 define i1 @ashrslt_01_09(i4 %x) {
1432 ; CHECK-LABEL: @ashrslt_01_09(
1433 ; CHECK-NEXT:    ret i1 false
1435   %s = ashr i4 %x, 1
1436   %c = icmp slt i4 %s, 9
1437   ret i1 %c
1440 define i1 @ashrslt_01_10(i4 %x) {
1441 ; CHECK-LABEL: @ashrslt_01_10(
1442 ; CHECK-NEXT:    ret i1 false
1444   %s = ashr i4 %x, 1
1445   %c = icmp slt i4 %s, 10
1446   ret i1 %c
1449 define i1 @ashrslt_01_11(i4 %x) {
1450 ; CHECK-LABEL: @ashrslt_01_11(
1451 ; CHECK-NEXT:    ret i1 false
1453   %s = ashr i4 %x, 1
1454   %c = icmp slt i4 %s, 11
1455   ret i1 %c
1458 define i1 @ashrslt_01_12(i4 %x) {
1459 ; CHECK-LABEL: @ashrslt_01_12(
1460 ; CHECK-NEXT:    ret i1 false
1462   %s = ashr i4 %x, 1
1463   %c = icmp slt i4 %s, 12
1464   ret i1 %c
1467 define i1 @ashrslt_01_13(i4 %x) {
1468 ; CHECK-LABEL: @ashrslt_01_13(
1469 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -6
1470 ; CHECK-NEXT:    ret i1 [[C]]
1472   %s = ashr i4 %x, 1
1473   %c = icmp slt i4 %s, 13
1474   ret i1 %c
1477 define i1 @ashrslt_01_14(i4 %x) {
1478 ; CHECK-LABEL: @ashrslt_01_14(
1479 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -4
1480 ; CHECK-NEXT:    ret i1 [[C]]
1482   %s = ashr i4 %x, 1
1483   %c = icmp slt i4 %s, 14
1484   ret i1 %c
1487 define i1 @ashrslt_01_15(i4 %x) {
1488 ; CHECK-LABEL: @ashrslt_01_15(
1489 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -2
1490 ; CHECK-NEXT:    ret i1 [[C]]
1492   %s = ashr i4 %x, 1
1493   %c = icmp slt i4 %s, 15
1494   ret i1 %c
1497 define i1 @ashrslt_02_00(i4 %x) {
1498 ; CHECK-LABEL: @ashrslt_02_00(
1499 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
1500 ; CHECK-NEXT:    ret i1 [[C]]
1502   %s = ashr i4 %x, 2
1503   %c = icmp slt i4 %s, 0
1504   ret i1 %c
1507 define i1 @ashrslt_02_01(i4 %x) {
1508 ; CHECK-LABEL: @ashrslt_02_01(
1509 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 4
1510 ; CHECK-NEXT:    ret i1 [[C]]
1512   %s = ashr i4 %x, 2
1513   %c = icmp slt i4 %s, 1
1514   ret i1 %c
1517 define i1 @ashrslt_02_02(i4 %x) {
1518 ; CHECK-LABEL: @ashrslt_02_02(
1519 ; CHECK-NEXT:    ret i1 true
1521   %s = ashr i4 %x, 2
1522   %c = icmp slt i4 %s, 2
1523   ret i1 %c
1526 define i1 @ashrslt_02_03(i4 %x) {
1527 ; CHECK-LABEL: @ashrslt_02_03(
1528 ; CHECK-NEXT:    ret i1 true
1530   %s = ashr i4 %x, 2
1531   %c = icmp slt i4 %s, 3
1532   ret i1 %c
1535 define i1 @ashrslt_02_04(i4 %x) {
1536 ; CHECK-LABEL: @ashrslt_02_04(
1537 ; CHECK-NEXT:    ret i1 true
1539   %s = ashr i4 %x, 2
1540   %c = icmp slt i4 %s, 4
1541   ret i1 %c
1544 define i1 @ashrslt_02_05(i4 %x) {
1545 ; CHECK-LABEL: @ashrslt_02_05(
1546 ; CHECK-NEXT:    ret i1 true
1548   %s = ashr i4 %x, 2
1549   %c = icmp slt i4 %s, 5
1550   ret i1 %c
1553 define i1 @ashrslt_02_06(i4 %x) {
1554 ; CHECK-LABEL: @ashrslt_02_06(
1555 ; CHECK-NEXT:    ret i1 true
1557   %s = ashr i4 %x, 2
1558   %c = icmp slt i4 %s, 6
1559   ret i1 %c
1562 define i1 @ashrslt_02_07(i4 %x) {
1563 ; CHECK-LABEL: @ashrslt_02_07(
1564 ; CHECK-NEXT:    ret i1 true
1566   %s = ashr i4 %x, 2
1567   %c = icmp slt i4 %s, 7
1568   ret i1 %c
1571 define i1 @ashrslt_02_08(i4 %x) {
1572 ; CHECK-LABEL: @ashrslt_02_08(
1573 ; CHECK-NEXT:    ret i1 false
1575   %s = ashr i4 %x, 2
1576   %c = icmp slt i4 %s, 8
1577   ret i1 %c
1580 define i1 @ashrslt_02_09(i4 %x) {
1581 ; CHECK-LABEL: @ashrslt_02_09(
1582 ; CHECK-NEXT:    ret i1 false
1584   %s = ashr i4 %x, 2
1585   %c = icmp slt i4 %s, 9
1586   ret i1 %c
1589 define i1 @ashrslt_02_10(i4 %x) {
1590 ; CHECK-LABEL: @ashrslt_02_10(
1591 ; CHECK-NEXT:    ret i1 false
1593   %s = ashr i4 %x, 2
1594   %c = icmp slt i4 %s, 10
1595   ret i1 %c
1598 define i1 @ashrslt_02_11(i4 %x) {
1599 ; CHECK-LABEL: @ashrslt_02_11(
1600 ; CHECK-NEXT:    ret i1 false
1602   %s = ashr i4 %x, 2
1603   %c = icmp slt i4 %s, 11
1604   ret i1 %c
1607 define i1 @ashrslt_02_12(i4 %x) {
1608 ; CHECK-LABEL: @ashrslt_02_12(
1609 ; CHECK-NEXT:    ret i1 false
1611   %s = ashr i4 %x, 2
1612   %c = icmp slt i4 %s, 12
1613   ret i1 %c
1616 define i1 @ashrslt_02_13(i4 %x) {
1617 ; CHECK-LABEL: @ashrslt_02_13(
1618 ; CHECK-NEXT:    ret i1 false
1620   %s = ashr i4 %x, 2
1621   %c = icmp slt i4 %s, 13
1622   ret i1 %c
1625 define i1 @ashrslt_02_14(i4 %x) {
1626 ; CHECK-LABEL: @ashrslt_02_14(
1627 ; CHECK-NEXT:    ret i1 false
1629   %s = ashr i4 %x, 2
1630   %c = icmp slt i4 %s, 14
1631   ret i1 %c
1634 define i1 @ashrslt_02_15(i4 %x) {
1635 ; CHECK-LABEL: @ashrslt_02_15(
1636 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -4
1637 ; CHECK-NEXT:    ret i1 [[C]]
1639   %s = ashr i4 %x, 2
1640   %c = icmp slt i4 %s, 15
1641   ret i1 %c
1644 define i1 @ashrslt_03_00(i4 %x) {
1645 ; CHECK-LABEL: @ashrslt_03_00(
1646 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
1647 ; CHECK-NEXT:    ret i1 [[C]]
1649   %s = ashr i4 %x, 3
1650   %c = icmp slt i4 %s, 0
1651   ret i1 %c
1654 define i1 @ashrslt_03_01(i4 %x) {
1655 ; CHECK-LABEL: @ashrslt_03_01(
1656 ; CHECK-NEXT:    ret i1 true
1658   %s = ashr i4 %x, 3
1659   %c = icmp slt i4 %s, 1
1660   ret i1 %c
1663 define i1 @ashrslt_03_02(i4 %x) {
1664 ; CHECK-LABEL: @ashrslt_03_02(
1665 ; CHECK-NEXT:    ret i1 true
1667   %s = ashr i4 %x, 3
1668   %c = icmp slt i4 %s, 2
1669   ret i1 %c
1672 define i1 @ashrslt_03_03(i4 %x) {
1673 ; CHECK-LABEL: @ashrslt_03_03(
1674 ; CHECK-NEXT:    ret i1 true
1676   %s = ashr i4 %x, 3
1677   %c = icmp slt i4 %s, 3
1678   ret i1 %c
1681 define i1 @ashrslt_03_04(i4 %x) {
1682 ; CHECK-LABEL: @ashrslt_03_04(
1683 ; CHECK-NEXT:    ret i1 true
1685   %s = ashr i4 %x, 3
1686   %c = icmp slt i4 %s, 4
1687   ret i1 %c
1690 define i1 @ashrslt_03_05(i4 %x) {
1691 ; CHECK-LABEL: @ashrslt_03_05(
1692 ; CHECK-NEXT:    ret i1 true
1694   %s = ashr i4 %x, 3
1695   %c = icmp slt i4 %s, 5
1696   ret i1 %c
1699 define i1 @ashrslt_03_06(i4 %x) {
1700 ; CHECK-LABEL: @ashrslt_03_06(
1701 ; CHECK-NEXT:    ret i1 true
1703   %s = ashr i4 %x, 3
1704   %c = icmp slt i4 %s, 6
1705   ret i1 %c
1708 define i1 @ashrslt_03_07(i4 %x) {
1709 ; CHECK-LABEL: @ashrslt_03_07(
1710 ; CHECK-NEXT:    ret i1 true
1712   %s = ashr i4 %x, 3
1713   %c = icmp slt i4 %s, 7
1714   ret i1 %c
1717 define i1 @ashrslt_03_08(i4 %x) {
1718 ; CHECK-LABEL: @ashrslt_03_08(
1719 ; CHECK-NEXT:    ret i1 false
1721   %s = ashr i4 %x, 3
1722   %c = icmp slt i4 %s, 8
1723   ret i1 %c
1726 define i1 @ashrslt_03_09(i4 %x) {
1727 ; CHECK-LABEL: @ashrslt_03_09(
1728 ; CHECK-NEXT:    ret i1 false
1730   %s = ashr i4 %x, 3
1731   %c = icmp slt i4 %s, 9
1732   ret i1 %c
1735 define i1 @ashrslt_03_10(i4 %x) {
1736 ; CHECK-LABEL: @ashrslt_03_10(
1737 ; CHECK-NEXT:    ret i1 false
1739   %s = ashr i4 %x, 3
1740   %c = icmp slt i4 %s, 10
1741   ret i1 %c
1744 define i1 @ashrslt_03_11(i4 %x) {
1745 ; CHECK-LABEL: @ashrslt_03_11(
1746 ; CHECK-NEXT:    ret i1 false
1748   %s = ashr i4 %x, 3
1749   %c = icmp slt i4 %s, 11
1750   ret i1 %c
1753 define i1 @ashrslt_03_12(i4 %x) {
1754 ; CHECK-LABEL: @ashrslt_03_12(
1755 ; CHECK-NEXT:    ret i1 false
1757   %s = ashr i4 %x, 3
1758   %c = icmp slt i4 %s, 12
1759   ret i1 %c
1762 define i1 @ashrslt_03_13(i4 %x) {
1763 ; CHECK-LABEL: @ashrslt_03_13(
1764 ; CHECK-NEXT:    ret i1 false
1766   %s = ashr i4 %x, 3
1767   %c = icmp slt i4 %s, 13
1768   ret i1 %c
1771 define i1 @ashrslt_03_14(i4 %x) {
1772 ; CHECK-LABEL: @ashrslt_03_14(
1773 ; CHECK-NEXT:    ret i1 false
1775   %s = ashr i4 %x, 3
1776   %c = icmp slt i4 %s, 14
1777   ret i1 %c
1780 define i1 @ashrslt_03_15(i4 %x) {
1781 ; CHECK-LABEL: @ashrslt_03_15(
1782 ; CHECK-NEXT:    ret i1 false
1784   %s = ashr i4 %x, 3
1785   %c = icmp slt i4 %s, 15
1786   ret i1 %c
1789 define i1 @lshrugt_01_00_exact(i4 %x) {
1790 ; CHECK-LABEL: @lshrugt_01_00_exact(
1791 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], 0
1792 ; CHECK-NEXT:    ret i1 [[C]]
1794   %s = lshr exact i4 %x, 1
1795   %c = icmp ugt i4 %s, 0
1796   ret i1 %c
1799 define i1 @lshrugt_01_01_exact(i4 %x) {
1800 ; CHECK-LABEL: @lshrugt_01_01_exact(
1801 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 2
1802 ; CHECK-NEXT:    ret i1 [[C]]
1804   %s = lshr exact i4 %x, 1
1805   %c = icmp ugt i4 %s, 1
1806   ret i1 %c
1809 define i1 @lshrugt_01_02_exact(i4 %x) {
1810 ; CHECK-LABEL: @lshrugt_01_02_exact(
1811 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 4
1812 ; CHECK-NEXT:    ret i1 [[C]]
1814   %s = lshr exact i4 %x, 1
1815   %c = icmp ugt i4 %s, 2
1816   ret i1 %c
1819 define i1 @lshrugt_01_03_exact(i4 %x) {
1820 ; CHECK-LABEL: @lshrugt_01_03_exact(
1821 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 6
1822 ; CHECK-NEXT:    ret i1 [[C]]
1824   %s = lshr exact i4 %x, 1
1825   %c = icmp ugt i4 %s, 3
1826   ret i1 %c
1829 define i1 @lshrugt_01_04_exact(i4 %x) {
1830 ; CHECK-LABEL: @lshrugt_01_04_exact(
1831 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -8
1832 ; CHECK-NEXT:    ret i1 [[C]]
1834   %s = lshr exact i4 %x, 1
1835   %c = icmp ugt i4 %s, 4
1836   ret i1 %c
1839 define i1 @lshrugt_01_05_exact(i4 %x) {
1840 ; CHECK-LABEL: @lshrugt_01_05_exact(
1841 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], -6
1842 ; CHECK-NEXT:    ret i1 [[C]]
1844   %s = lshr exact i4 %x, 1
1845   %c = icmp ugt i4 %s, 5
1846   ret i1 %c
1849 define i1 @lshrugt_01_06_exact(i4 %x) {
1850 ; CHECK-LABEL: @lshrugt_01_06_exact(
1851 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i4 [[X:%.*]], -2
1852 ; CHECK-NEXT:    ret i1 [[C]]
1854   %s = lshr exact i4 %x, 1
1855   %c = icmp ugt i4 %s, 6
1856   ret i1 %c
1859 define i1 @lshrugt_01_07_exact(i4 %x) {
1860 ; CHECK-LABEL: @lshrugt_01_07_exact(
1861 ; CHECK-NEXT:    ret i1 false
1863   %s = lshr exact i4 %x, 1
1864   %c = icmp ugt i4 %s, 7
1865   ret i1 %c
1868 define i1 @lshrugt_01_08_exact(i4 %x) {
1869 ; CHECK-LABEL: @lshrugt_01_08_exact(
1870 ; CHECK-NEXT:    ret i1 false
1872   %s = lshr exact i4 %x, 1
1873   %c = icmp ugt i4 %s, 8
1874   ret i1 %c
1877 define i1 @lshrugt_01_09_exact(i4 %x) {
1878 ; CHECK-LABEL: @lshrugt_01_09_exact(
1879 ; CHECK-NEXT:    ret i1 false
1881   %s = lshr exact i4 %x, 1
1882   %c = icmp ugt i4 %s, 9
1883   ret i1 %c
1886 define i1 @lshrugt_01_10_exact(i4 %x) {
1887 ; CHECK-LABEL: @lshrugt_01_10_exact(
1888 ; CHECK-NEXT:    ret i1 false
1890   %s = lshr exact i4 %x, 1
1891   %c = icmp ugt i4 %s, 10
1892   ret i1 %c
1895 define i1 @lshrugt_01_11_exact(i4 %x) {
1896 ; CHECK-LABEL: @lshrugt_01_11_exact(
1897 ; CHECK-NEXT:    ret i1 false
1899   %s = lshr exact i4 %x, 1
1900   %c = icmp ugt i4 %s, 11
1901   ret i1 %c
1904 define i1 @lshrugt_01_12_exact(i4 %x) {
1905 ; CHECK-LABEL: @lshrugt_01_12_exact(
1906 ; CHECK-NEXT:    ret i1 false
1908   %s = lshr exact i4 %x, 1
1909   %c = icmp ugt i4 %s, 12
1910   ret i1 %c
1913 define i1 @lshrugt_01_13_exact(i4 %x) {
1914 ; CHECK-LABEL: @lshrugt_01_13_exact(
1915 ; CHECK-NEXT:    ret i1 false
1917   %s = lshr exact i4 %x, 1
1918   %c = icmp ugt i4 %s, 13
1919   ret i1 %c
1922 define i1 @lshrugt_01_14_exact(i4 %x) {
1923 ; CHECK-LABEL: @lshrugt_01_14_exact(
1924 ; CHECK-NEXT:    ret i1 false
1926   %s = lshr exact i4 %x, 1
1927   %c = icmp ugt i4 %s, 14
1928   ret i1 %c
1931 define i1 @lshrugt_01_15_exact(i4 %x) {
1932 ; CHECK-LABEL: @lshrugt_01_15_exact(
1933 ; CHECK-NEXT:    ret i1 false
1935   %s = lshr exact i4 %x, 1
1936   %c = icmp ugt i4 %s, 15
1937   ret i1 %c
1940 define i1 @lshrugt_02_00_exact(i4 %x) {
1941 ; CHECK-LABEL: @lshrugt_02_00_exact(
1942 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], 0
1943 ; CHECK-NEXT:    ret i1 [[C]]
1945   %s = lshr exact i4 %x, 2
1946   %c = icmp ugt i4 %s, 0
1947   ret i1 %c
1950 define i1 @lshrugt_02_01_exact(i4 %x) {
1951 ; CHECK-LABEL: @lshrugt_02_01_exact(
1952 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i4 [[X:%.*]], 4
1953 ; CHECK-NEXT:    ret i1 [[C]]
1955   %s = lshr exact i4 %x, 2
1956   %c = icmp ugt i4 %s, 1
1957   ret i1 %c
1960 define i1 @lshrugt_02_02_exact(i4 %x) {
1961 ; CHECK-LABEL: @lshrugt_02_02_exact(
1962 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i4 [[X:%.*]], -4
1963 ; CHECK-NEXT:    ret i1 [[C]]
1965   %s = lshr exact i4 %x, 2
1966   %c = icmp ugt i4 %s, 2
1967   ret i1 %c
1970 define i1 @lshrugt_02_03_exact(i4 %x) {
1971 ; CHECK-LABEL: @lshrugt_02_03_exact(
1972 ; CHECK-NEXT:    ret i1 false
1974   %s = lshr exact i4 %x, 2
1975   %c = icmp ugt i4 %s, 3
1976   ret i1 %c
1979 define i1 @lshrugt_02_04_exact(i4 %x) {
1980 ; CHECK-LABEL: @lshrugt_02_04_exact(
1981 ; CHECK-NEXT:    ret i1 false
1983   %s = lshr exact i4 %x, 2
1984   %c = icmp ugt i4 %s, 4
1985   ret i1 %c
1988 define i1 @lshrugt_02_05_exact(i4 %x) {
1989 ; CHECK-LABEL: @lshrugt_02_05_exact(
1990 ; CHECK-NEXT:    ret i1 false
1992   %s = lshr exact i4 %x, 2
1993   %c = icmp ugt i4 %s, 5
1994   ret i1 %c
1997 define i1 @lshrugt_02_06_exact(i4 %x) {
1998 ; CHECK-LABEL: @lshrugt_02_06_exact(
1999 ; CHECK-NEXT:    ret i1 false
2001   %s = lshr exact i4 %x, 2
2002   %c = icmp ugt i4 %s, 6
2003   ret i1 %c
2006 define i1 @lshrugt_02_07_exact(i4 %x) {
2007 ; CHECK-LABEL: @lshrugt_02_07_exact(
2008 ; CHECK-NEXT:    ret i1 false
2010   %s = lshr exact i4 %x, 2
2011   %c = icmp ugt i4 %s, 7
2012   ret i1 %c
2015 define i1 @lshrugt_02_08_exact(i4 %x) {
2016 ; CHECK-LABEL: @lshrugt_02_08_exact(
2017 ; CHECK-NEXT:    ret i1 false
2019   %s = lshr exact i4 %x, 2
2020   %c = icmp ugt i4 %s, 8
2021   ret i1 %c
2024 define i1 @lshrugt_02_09_exact(i4 %x) {
2025 ; CHECK-LABEL: @lshrugt_02_09_exact(
2026 ; CHECK-NEXT:    ret i1 false
2028   %s = lshr exact i4 %x, 2
2029   %c = icmp ugt i4 %s, 9
2030   ret i1 %c
2033 define i1 @lshrugt_02_10_exact(i4 %x) {
2034 ; CHECK-LABEL: @lshrugt_02_10_exact(
2035 ; CHECK-NEXT:    ret i1 false
2037   %s = lshr exact i4 %x, 2
2038   %c = icmp ugt i4 %s, 10
2039   ret i1 %c
2042 define i1 @lshrugt_02_11_exact(i4 %x) {
2043 ; CHECK-LABEL: @lshrugt_02_11_exact(
2044 ; CHECK-NEXT:    ret i1 false
2046   %s = lshr exact i4 %x, 2
2047   %c = icmp ugt i4 %s, 11
2048   ret i1 %c
2051 define i1 @lshrugt_02_12_exact(i4 %x) {
2052 ; CHECK-LABEL: @lshrugt_02_12_exact(
2053 ; CHECK-NEXT:    ret i1 false
2055   %s = lshr exact i4 %x, 2
2056   %c = icmp ugt i4 %s, 12
2057   ret i1 %c
2060 define i1 @lshrugt_02_13_exact(i4 %x) {
2061 ; CHECK-LABEL: @lshrugt_02_13_exact(
2062 ; CHECK-NEXT:    ret i1 false
2064   %s = lshr exact i4 %x, 2
2065   %c = icmp ugt i4 %s, 13
2066   ret i1 %c
2069 define i1 @lshrugt_02_14_exact(i4 %x) {
2070 ; CHECK-LABEL: @lshrugt_02_14_exact(
2071 ; CHECK-NEXT:    ret i1 false
2073   %s = lshr exact i4 %x, 2
2074   %c = icmp ugt i4 %s, 14
2075   ret i1 %c
2078 define i1 @lshrugt_02_15_exact(i4 %x) {
2079 ; CHECK-LABEL: @lshrugt_02_15_exact(
2080 ; CHECK-NEXT:    ret i1 false
2082   %s = lshr exact i4 %x, 2
2083   %c = icmp ugt i4 %s, 15
2084   ret i1 %c
2087 define i1 @lshrugt_03_00_exact(i4 %x) {
2088 ; CHECK-LABEL: @lshrugt_03_00_exact(
2089 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], 0
2090 ; CHECK-NEXT:    ret i1 [[C]]
2092   %s = lshr exact i4 %x, 3
2093   %c = icmp ugt i4 %s, 0
2094   ret i1 %c
2097 define i1 @lshrugt_03_01_exact(i4 %x) {
2098 ; CHECK-LABEL: @lshrugt_03_01_exact(
2099 ; CHECK-NEXT:    ret i1 false
2101   %s = lshr exact i4 %x, 3
2102   %c = icmp ugt i4 %s, 1
2103   ret i1 %c
2106 define i1 @lshrugt_03_02_exact(i4 %x) {
2107 ; CHECK-LABEL: @lshrugt_03_02_exact(
2108 ; CHECK-NEXT:    ret i1 false
2110   %s = lshr exact i4 %x, 3
2111   %c = icmp ugt i4 %s, 2
2112   ret i1 %c
2115 define i1 @lshrugt_03_03_exact(i4 %x) {
2116 ; CHECK-LABEL: @lshrugt_03_03_exact(
2117 ; CHECK-NEXT:    ret i1 false
2119   %s = lshr exact i4 %x, 3
2120   %c = icmp ugt i4 %s, 3
2121   ret i1 %c
2124 define i1 @lshrugt_03_04_exact(i4 %x) {
2125 ; CHECK-LABEL: @lshrugt_03_04_exact(
2126 ; CHECK-NEXT:    ret i1 false
2128   %s = lshr exact i4 %x, 3
2129   %c = icmp ugt i4 %s, 4
2130   ret i1 %c
2133 define i1 @lshrugt_03_05_exact(i4 %x) {
2134 ; CHECK-LABEL: @lshrugt_03_05_exact(
2135 ; CHECK-NEXT:    ret i1 false
2137   %s = lshr exact i4 %x, 3
2138   %c = icmp ugt i4 %s, 5
2139   ret i1 %c
2142 define i1 @lshrugt_03_06_exact(i4 %x) {
2143 ; CHECK-LABEL: @lshrugt_03_06_exact(
2144 ; CHECK-NEXT:    ret i1 false
2146   %s = lshr exact i4 %x, 3
2147   %c = icmp ugt i4 %s, 6
2148   ret i1 %c
2151 define i1 @lshrugt_03_07_exact(i4 %x) {
2152 ; CHECK-LABEL: @lshrugt_03_07_exact(
2153 ; CHECK-NEXT:    ret i1 false
2155   %s = lshr exact i4 %x, 3
2156   %c = icmp ugt i4 %s, 7
2157   ret i1 %c
2160 define i1 @lshrugt_03_08_exact(i4 %x) {
2161 ; CHECK-LABEL: @lshrugt_03_08_exact(
2162 ; CHECK-NEXT:    ret i1 false
2164   %s = lshr exact i4 %x, 3
2165   %c = icmp ugt i4 %s, 8
2166   ret i1 %c
2169 define i1 @lshrugt_03_09_exact(i4 %x) {
2170 ; CHECK-LABEL: @lshrugt_03_09_exact(
2171 ; CHECK-NEXT:    ret i1 false
2173   %s = lshr exact i4 %x, 3
2174   %c = icmp ugt i4 %s, 9
2175   ret i1 %c
2178 define i1 @lshrugt_03_10_exact(i4 %x) {
2179 ; CHECK-LABEL: @lshrugt_03_10_exact(
2180 ; CHECK-NEXT:    ret i1 false
2182   %s = lshr exact i4 %x, 3
2183   %c = icmp ugt i4 %s, 10
2184   ret i1 %c
2187 define i1 @lshrugt_03_11_exact(i4 %x) {
2188 ; CHECK-LABEL: @lshrugt_03_11_exact(
2189 ; CHECK-NEXT:    ret i1 false
2191   %s = lshr exact i4 %x, 3
2192   %c = icmp ugt i4 %s, 11
2193   ret i1 %c
2196 define i1 @lshrugt_03_12_exact(i4 %x) {
2197 ; CHECK-LABEL: @lshrugt_03_12_exact(
2198 ; CHECK-NEXT:    ret i1 false
2200   %s = lshr exact i4 %x, 3
2201   %c = icmp ugt i4 %s, 12
2202   ret i1 %c
2205 define i1 @lshrugt_03_13_exact(i4 %x) {
2206 ; CHECK-LABEL: @lshrugt_03_13_exact(
2207 ; CHECK-NEXT:    ret i1 false
2209   %s = lshr exact i4 %x, 3
2210   %c = icmp ugt i4 %s, 13
2211   ret i1 %c
2214 define i1 @lshrugt_03_14_exact(i4 %x) {
2215 ; CHECK-LABEL: @lshrugt_03_14_exact(
2216 ; CHECK-NEXT:    ret i1 false
2218   %s = lshr exact i4 %x, 3
2219   %c = icmp ugt i4 %s, 14
2220   ret i1 %c
2223 define i1 @lshrugt_03_15_exact(i4 %x) {
2224 ; CHECK-LABEL: @lshrugt_03_15_exact(
2225 ; CHECK-NEXT:    ret i1 false
2227   %s = lshr exact i4 %x, 3
2228   %c = icmp ugt i4 %s, 15
2229   ret i1 %c
2232 define i1 @ashr_eq_exact(i8 %x) {
2233 ; CHECK-LABEL: @ashr_eq_exact(
2234 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[X:%.*]], 80
2235 ; CHECK-NEXT:    ret i1 [[C]]
2237   %s = ashr exact i8 %x, 3
2238   %c = icmp eq i8 %s, 10
2239   ret i1 %c
2242 define i1 @ashr_ne_exact(i8 %x) {
2243 ; CHECK-LABEL: @ashr_ne_exact(
2244 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[X:%.*]], 80
2245 ; CHECK-NEXT:    ret i1 [[C]]
2247   %s = ashr exact i8 %x, 3
2248   %c = icmp ne i8 %s, 10
2249   ret i1 %c
2252 define i1 @ashr_ugt_exact(i8 %x) {
2253 ; CHECK-LABEL: @ashr_ugt_exact(
2254 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 80
2255 ; CHECK-NEXT:    ret i1 [[C]]
2257   %s = ashr exact i8 %x, 3
2258   %c = icmp ugt i8 %s, 10
2259   ret i1 %c
2263 define i1 @ashr_uge_exact(i8 %x) {
2264 ; CHECK-LABEL: @ashr_uge_exact(
2265 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 72
2266 ; CHECK-NEXT:    ret i1 [[C]]
2268   %s = ashr exact i8 %x, 3
2269   %c = icmp uge i8 %s, 10
2270   ret i1 %c
2273 define i1 @ashr_ult_exact(i8 %x) {
2274 ; CHECK-LABEL: @ashr_ult_exact(
2275 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 80
2276 ; CHECK-NEXT:    ret i1 [[C]]
2278   %s = ashr exact i8 %x, 3
2279   %c = icmp ult i8 %s, 10
2280   ret i1 %c
2284 define i1 @ashr_ule_exact(i8 %x) {
2285 ; CHECK-LABEL: @ashr_ule_exact(
2286 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 88
2287 ; CHECK-NEXT:    ret i1 [[C]]
2289   %s = ashr exact i8 %x, 3
2290   %c = icmp ule i8 %s, 10
2291   ret i1 %c
2295 define i1 @ashr_sgt_exact(i8 %x) {
2296 ; CHECK-LABEL: @ashr_sgt_exact(
2297 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 80
2298 ; CHECK-NEXT:    ret i1 [[C]]
2300   %s = ashr exact i8 %x, 3
2301   %c = icmp sgt i8 %s, 10
2302   ret i1 %c
2306 define i1 @ashr_sge_exact(i8 %x) {
2307 ; CHECK-LABEL: @ashr_sge_exact(
2308 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 72
2309 ; CHECK-NEXT:    ret i1 [[C]]
2311   %s = ashr exact i8 %x, 3
2312   %c = icmp sge i8 %s, 10
2313   ret i1 %c
2316 define i1 @ashr_slt_exact(i8 %x) {
2317 ; CHECK-LABEL: @ashr_slt_exact(
2318 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 80
2319 ; CHECK-NEXT:    ret i1 [[C]]
2321   %s = ashr exact i8 %x, 3
2322   %c = icmp slt i8 %s, 10
2323   ret i1 %c
2326 define i1 @ashr_sle_exact(i8 %x) {
2327 ; CHECK-LABEL: @ashr_sle_exact(
2328 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 88
2329 ; CHECK-NEXT:    ret i1 [[C]]
2331   %s = ashr exact i8 %x, 3
2332   %c = icmp sle i8 %s, 10
2333   ret i1 %c
2336 define i1 @ashr_eq_noexact(i8 %x) {
2337 ; CHECK-LABEL: @ashr_eq_noexact(
2338 ; CHECK-NEXT:    [[S_MASK:%.*]] = and i8 [[X:%.*]], -8
2339 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i8 [[S_MASK]], 80
2340 ; CHECK-NEXT:    ret i1 [[C]]
2342   %s = ashr i8 %x, 3
2343   %c = icmp eq i8 %s, 10
2344   ret i1 %c
2347 define i1 @ashr_ne_noexact(i8 %x) {
2348 ; CHECK-LABEL: @ashr_ne_noexact(
2349 ; CHECK-NEXT:    [[S_MASK:%.*]] = and i8 [[X:%.*]], -8
2350 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i8 [[S_MASK]], 80
2351 ; CHECK-NEXT:    ret i1 [[C]]
2353   %s = ashr i8 %x, 3
2354   %c = icmp ne i8 %s, 10
2355   ret i1 %c
2358 define i1 @ashr_ugt_noexact(i8 %x) {
2359 ; CHECK-LABEL: @ashr_ugt_noexact(
2360 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 87
2361 ; CHECK-NEXT:    ret i1 [[C]]
2363   %s = ashr i8 %x, 3
2364   %c = icmp ugt i8 %s, 10
2365   ret i1 %c
2369 define i1 @ashr_uge_noexact(i8 %x) {
2370 ; CHECK-LABEL: @ashr_uge_noexact(
2371 ; CHECK-NEXT:    [[C:%.*]] = icmp ugt i8 [[X:%.*]], 79
2372 ; CHECK-NEXT:    ret i1 [[C]]
2374   %s = ashr i8 %x, 3
2375   %c = icmp uge i8 %s, 10
2376   ret i1 %c
2379 define i1 @ashr_ult_noexact(i8 %x) {
2380 ; CHECK-LABEL: @ashr_ult_noexact(
2381 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 80
2382 ; CHECK-NEXT:    ret i1 [[C]]
2384   %s = ashr i8 %x, 3
2385   %c = icmp ult i8 %s, 10
2386   ret i1 %c
2390 define i1 @ashr_ule_noexact(i8 %x) {
2391 ; CHECK-LABEL: @ashr_ule_noexact(
2392 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[X:%.*]], 88
2393 ; CHECK-NEXT:    ret i1 [[C]]
2395   %s = ashr i8 %x, 3
2396   %c = icmp ule i8 %s, 10
2397   ret i1 %c
2401 define i1 @ashr_sgt_noexact(i8 %x) {
2402 ; CHECK-LABEL: @ashr_sgt_noexact(
2403 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 87
2404 ; CHECK-NEXT:    ret i1 [[C]]
2406   %s = ashr i8 %x, 3
2407   %c = icmp sgt i8 %s, 10
2408   ret i1 %c
2412 define i1 @ashr_sge_noexact(i8 %x) {
2413 ; CHECK-LABEL: @ashr_sge_noexact(
2414 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i8 [[X:%.*]], 79
2415 ; CHECK-NEXT:    ret i1 [[C]]
2417   %s = ashr i8 %x, 3
2418   %c = icmp sge i8 %s, 10
2419   ret i1 %c
2422 define i1 @ashr_slt_noexact(i8 %x) {
2423 ; CHECK-LABEL: @ashr_slt_noexact(
2424 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 80
2425 ; CHECK-NEXT:    ret i1 [[C]]
2427   %s = ashr i8 %x, 3
2428   %c = icmp slt i8 %s, 10
2429   ret i1 %c
2432 define i1 @ashr_sle_noexact(i8 %x) {
2433 ; CHECK-LABEL: @ashr_sle_noexact(
2434 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i8 [[X:%.*]], 88
2435 ; CHECK-NEXT:    ret i1 [[C]]
2437   %s = ashr i8 %x, 3
2438   %c = icmp sle i8 %s, 10
2439   ret i1 %c
2442 define i1 @ashr_00_00_ashr_extra_use(i8 %x, ptr %ptr) {
2443 ; CHECK-LABEL: @ashr_00_00_ashr_extra_use(
2444 ; CHECK-NEXT:    [[S:%.*]] = ashr exact i8 [[X:%.*]], 3
2445 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i8 [[S]], 11
2446 ; CHECK-NEXT:    store i8 [[S]], ptr [[PTR:%.*]], align 1
2447 ; CHECK-NEXT:    ret i1 [[C]]
2449   %s = ashr exact i8 %x, 3
2450   %c = icmp ule i8 %s, 10
2451   store i8 %s, ptr %ptr
2452   ret i1 %c
2455 define <4 x i1> @ashr_00_00_vec(<4 x i8> %x) {
2456 ; CHECK-LABEL: @ashr_00_00_vec(
2457 ; CHECK-NEXT:    [[C:%.*]] = icmp ult <4 x i8> [[X:%.*]], <i8 88, i8 88, i8 88, i8 88>
2458 ; CHECK-NEXT:    ret <4 x i1> [[C]]
2460   %s = ashr exact <4 x i8> %x, <i8 3,i8 3, i8 3, i8 3>
2461   %c = icmp ule <4 x i8> %s, <i8 10,i8 10,i8 10,i8 10>
2462   ret <4 x i1> %c
2465 define i1 @ashr_sgt_overflow(i8 %x) {
2466 ; CHECK-LABEL: @ashr_sgt_overflow(
2467 ; CHECK-NEXT:    ret i1 false
2469   %s = ashr i8 %x, 1
2470   %c = icmp sgt i8 %s, 63
2471   ret i1 %c
2474 define i1 @lshrult_01_00_exact(i4 %x) {
2475 ; CHECK-LABEL: @lshrult_01_00_exact(
2476 ; CHECK-NEXT:    ret i1 false
2478   %s = lshr exact i4 %x, 1
2479   %c = icmp ult i4 %s, 0
2480   ret i1 %c
2483 define i1 @lshrult_01_01_exact(i4 %x) {
2484 ; CHECK-LABEL: @lshrult_01_01_exact(
2485 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i4 [[X:%.*]], 0
2486 ; CHECK-NEXT:    ret i1 [[C]]
2488   %s = lshr exact i4 %x, 1
2489   %c = icmp ult i4 %s, 1
2490   ret i1 %c
2493 define i1 @lshrult_01_02_exact(i4 %x) {
2494 ; CHECK-LABEL: @lshrult_01_02_exact(
2495 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 4
2496 ; CHECK-NEXT:    ret i1 [[C]]
2498   %s = lshr exact i4 %x, 1
2499   %c = icmp ult i4 %s, 2
2500   ret i1 %c
2503 define i1 @lshrult_01_03_exact(i4 %x) {
2504 ; CHECK-LABEL: @lshrult_01_03_exact(
2505 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], 6
2506 ; CHECK-NEXT:    ret i1 [[C]]
2508   %s = lshr exact i4 %x, 1
2509   %c = icmp ult i4 %s, 3
2510   ret i1 %c
2513 define i1 @lshrult_01_04_exact(i4 %x) {
2514 ; CHECK-LABEL: @lshrult_01_04_exact(
2515 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
2516 ; CHECK-NEXT:    ret i1 [[C]]
2518   %s = lshr exact i4 %x, 1
2519   %c = icmp ult i4 %s, 4
2520   ret i1 %c
2523 define i1 @lshrult_01_05_exact(i4 %x) {
2524 ; CHECK-LABEL: @lshrult_01_05_exact(
2525 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -6
2526 ; CHECK-NEXT:    ret i1 [[C]]
2528   %s = lshr exact i4 %x, 1
2529   %c = icmp ult i4 %s, 5
2530   ret i1 %c
2533 define i1 @lshrult_01_06_exact(i4 %x) {
2534 ; CHECK-LABEL: @lshrult_01_06_exact(
2535 ; CHECK-NEXT:    [[C:%.*]] = icmp ult i4 [[X:%.*]], -4
2536 ; CHECK-NEXT:    ret i1 [[C]]
2538   %s = lshr exact i4 %x, 1
2539   %c = icmp ult i4 %s, 6
2540   ret i1 %c
2543 define i1 @lshrult_01_07_exact(i4 %x) {
2544 ; CHECK-LABEL: @lshrult_01_07_exact(
2545 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], -2
2546 ; CHECK-NEXT:    ret i1 [[C]]
2548   %s = lshr exact i4 %x, 1
2549   %c = icmp ult i4 %s, 7
2550   ret i1 %c
2553 define i1 @lshrult_01_08_exact(i4 %x) {
2554 ; CHECK-LABEL: @lshrult_01_08_exact(
2555 ; CHECK-NEXT:    ret i1 true
2557   %s = lshr exact i4 %x, 1
2558   %c = icmp ult i4 %s, 8
2559   ret i1 %c
2562 define i1 @lshrult_01_09_exact(i4 %x) {
2563 ; CHECK-LABEL: @lshrult_01_09_exact(
2564 ; CHECK-NEXT:    ret i1 true
2566   %s = lshr exact i4 %x, 1
2567   %c = icmp ult i4 %s, 9
2568   ret i1 %c
2571 define i1 @lshrult_01_10_exact(i4 %x) {
2572 ; CHECK-LABEL: @lshrult_01_10_exact(
2573 ; CHECK-NEXT:    ret i1 true
2575   %s = lshr exact i4 %x, 1
2576   %c = icmp ult i4 %s, 10
2577   ret i1 %c
2580 define i1 @lshrult_01_11_exact(i4 %x) {
2581 ; CHECK-LABEL: @lshrult_01_11_exact(
2582 ; CHECK-NEXT:    ret i1 true
2584   %s = lshr exact i4 %x, 1
2585   %c = icmp ult i4 %s, 11
2586   ret i1 %c
2589 define i1 @lshrult_01_12_exact(i4 %x) {
2590 ; CHECK-LABEL: @lshrult_01_12_exact(
2591 ; CHECK-NEXT:    ret i1 true
2593   %s = lshr exact i4 %x, 1
2594   %c = icmp ult i4 %s, 12
2595   ret i1 %c
2598 define i1 @lshrult_01_13_exact(i4 %x) {
2599 ; CHECK-LABEL: @lshrult_01_13_exact(
2600 ; CHECK-NEXT:    ret i1 true
2602   %s = lshr exact i4 %x, 1
2603   %c = icmp ult i4 %s, 13
2604   ret i1 %c
2607 define i1 @lshrult_01_14_exact(i4 %x) {
2608 ; CHECK-LABEL: @lshrult_01_14_exact(
2609 ; CHECK-NEXT:    ret i1 true
2611   %s = lshr exact i4 %x, 1
2612   %c = icmp ult i4 %s, 14
2613   ret i1 %c
2616 define i1 @lshrult_01_15_exact(i4 %x) {
2617 ; CHECK-LABEL: @lshrult_01_15_exact(
2618 ; CHECK-NEXT:    ret i1 true
2620   %s = lshr exact i4 %x, 1
2621   %c = icmp ult i4 %s, 15
2622   ret i1 %c
2625 define i1 @lshrult_02_00_exact(i4 %x) {
2626 ; CHECK-LABEL: @lshrult_02_00_exact(
2627 ; CHECK-NEXT:    ret i1 false
2629   %s = lshr exact i4 %x, 2
2630   %c = icmp ult i4 %s, 0
2631   ret i1 %c
2634 define i1 @lshrult_02_01_exact(i4 %x) {
2635 ; CHECK-LABEL: @lshrult_02_01_exact(
2636 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i4 [[X:%.*]], 0
2637 ; CHECK-NEXT:    ret i1 [[C]]
2639   %s = lshr exact i4 %x, 2
2640   %c = icmp ult i4 %s, 1
2641   ret i1 %c
2644 define i1 @lshrult_02_02_exact(i4 %x) {
2645 ; CHECK-LABEL: @lshrult_02_02_exact(
2646 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
2647 ; CHECK-NEXT:    ret i1 [[C]]
2649   %s = lshr exact i4 %x, 2
2650   %c = icmp ult i4 %s, 2
2651   ret i1 %c
2654 define i1 @lshrult_02_03_exact(i4 %x) {
2655 ; CHECK-LABEL: @lshrult_02_03_exact(
2656 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], -4
2657 ; CHECK-NEXT:    ret i1 [[C]]
2659   %s = lshr exact i4 %x, 2
2660   %c = icmp ult i4 %s, 3
2661   ret i1 %c
2664 define i1 @lshrult_02_04_exact(i4 %x) {
2665 ; CHECK-LABEL: @lshrult_02_04_exact(
2666 ; CHECK-NEXT:    ret i1 true
2668   %s = lshr exact i4 %x, 2
2669   %c = icmp ult i4 %s, 4
2670   ret i1 %c
2673 define i1 @lshrult_02_05_exact(i4 %x) {
2674 ; CHECK-LABEL: @lshrult_02_05_exact(
2675 ; CHECK-NEXT:    ret i1 true
2677   %s = lshr exact i4 %x, 2
2678   %c = icmp ult i4 %s, 5
2679   ret i1 %c
2682 define i1 @lshrult_02_06_exact(i4 %x) {
2683 ; CHECK-LABEL: @lshrult_02_06_exact(
2684 ; CHECK-NEXT:    ret i1 true
2686   %s = lshr exact i4 %x, 2
2687   %c = icmp ult i4 %s, 6
2688   ret i1 %c
2691 define i1 @lshrult_02_07_exact(i4 %x) {
2692 ; CHECK-LABEL: @lshrult_02_07_exact(
2693 ; CHECK-NEXT:    ret i1 true
2695   %s = lshr exact i4 %x, 2
2696   %c = icmp ult i4 %s, 7
2697   ret i1 %c
2700 define i1 @lshrult_02_08_exact(i4 %x) {
2701 ; CHECK-LABEL: @lshrult_02_08_exact(
2702 ; CHECK-NEXT:    ret i1 true
2704   %s = lshr exact i4 %x, 2
2705   %c = icmp ult i4 %s, 8
2706   ret i1 %c
2709 define i1 @lshrult_02_09_exact(i4 %x) {
2710 ; CHECK-LABEL: @lshrult_02_09_exact(
2711 ; CHECK-NEXT:    ret i1 true
2713   %s = lshr exact i4 %x, 2
2714   %c = icmp ult i4 %s, 9
2715   ret i1 %c
2718 define i1 @lshrult_02_10_exact(i4 %x) {
2719 ; CHECK-LABEL: @lshrult_02_10_exact(
2720 ; CHECK-NEXT:    ret i1 true
2722   %s = lshr exact i4 %x, 2
2723   %c = icmp ult i4 %s, 10
2724   ret i1 %c
2727 define i1 @lshrult_02_11_exact(i4 %x) {
2728 ; CHECK-LABEL: @lshrult_02_11_exact(
2729 ; CHECK-NEXT:    ret i1 true
2731   %s = lshr exact i4 %x, 2
2732   %c = icmp ult i4 %s, 11
2733   ret i1 %c
2736 define i1 @lshrult_02_12_exact(i4 %x) {
2737 ; CHECK-LABEL: @lshrult_02_12_exact(
2738 ; CHECK-NEXT:    ret i1 true
2740   %s = lshr exact i4 %x, 2
2741   %c = icmp ult i4 %s, 12
2742   ret i1 %c
2745 define i1 @lshrult_02_13_exact(i4 %x) {
2746 ; CHECK-LABEL: @lshrult_02_13_exact(
2747 ; CHECK-NEXT:    ret i1 true
2749   %s = lshr exact i4 %x, 2
2750   %c = icmp ult i4 %s, 13
2751   ret i1 %c
2754 define i1 @lshrult_02_14_exact(i4 %x) {
2755 ; CHECK-LABEL: @lshrult_02_14_exact(
2756 ; CHECK-NEXT:    ret i1 true
2758   %s = lshr exact i4 %x, 2
2759   %c = icmp ult i4 %s, 14
2760   ret i1 %c
2763 define i1 @lshrult_02_15_exact(i4 %x) {
2764 ; CHECK-LABEL: @lshrult_02_15_exact(
2765 ; CHECK-NEXT:    ret i1 true
2767   %s = lshr exact i4 %x, 2
2768   %c = icmp ult i4 %s, 15
2769   ret i1 %c
2772 define i1 @lshrult_03_00_exact(i4 %x) {
2773 ; CHECK-LABEL: @lshrult_03_00_exact(
2774 ; CHECK-NEXT:    ret i1 false
2776   %s = lshr exact i4 %x, 3
2777   %c = icmp ult i4 %s, 0
2778   ret i1 %c
2781 define i1 @lshrult_03_01_exact(i4 %x) {
2782 ; CHECK-LABEL: @lshrult_03_01_exact(
2783 ; CHECK-NEXT:    [[C:%.*]] = icmp eq i4 [[X:%.*]], 0
2784 ; CHECK-NEXT:    ret i1 [[C]]
2786   %s = lshr exact i4 %x, 3
2787   %c = icmp ult i4 %s, 1
2788   ret i1 %c
2791 define i1 @lshrult_03_02_exact(i4 %x) {
2792 ; CHECK-LABEL: @lshrult_03_02_exact(
2793 ; CHECK-NEXT:    ret i1 true
2795   %s = lshr exact i4 %x, 3
2796   %c = icmp ult i4 %s, 2
2797   ret i1 %c
2800 define i1 @lshrult_03_03_exact(i4 %x) {
2801 ; CHECK-LABEL: @lshrult_03_03_exact(
2802 ; CHECK-NEXT:    ret i1 true
2804   %s = lshr exact i4 %x, 3
2805   %c = icmp ult i4 %s, 3
2806   ret i1 %c
2809 define i1 @lshrult_03_04_exact(i4 %x) {
2810 ; CHECK-LABEL: @lshrult_03_04_exact(
2811 ; CHECK-NEXT:    ret i1 true
2813   %s = lshr exact i4 %x, 3
2814   %c = icmp ult i4 %s, 4
2815   ret i1 %c
2818 define i1 @lshrult_03_05_exact(i4 %x) {
2819 ; CHECK-LABEL: @lshrult_03_05_exact(
2820 ; CHECK-NEXT:    ret i1 true
2822   %s = lshr exact i4 %x, 3
2823   %c = icmp ult i4 %s, 5
2824   ret i1 %c
2827 define i1 @lshrult_03_06_exact(i4 %x) {
2828 ; CHECK-LABEL: @lshrult_03_06_exact(
2829 ; CHECK-NEXT:    ret i1 true
2831   %s = lshr exact i4 %x, 3
2832   %c = icmp ult i4 %s, 6
2833   ret i1 %c
2836 define i1 @lshrult_03_07_exact(i4 %x) {
2837 ; CHECK-LABEL: @lshrult_03_07_exact(
2838 ; CHECK-NEXT:    ret i1 true
2840   %s = lshr exact i4 %x, 3
2841   %c = icmp ult i4 %s, 7
2842   ret i1 %c
2845 define i1 @lshrult_03_08_exact(i4 %x) {
2846 ; CHECK-LABEL: @lshrult_03_08_exact(
2847 ; CHECK-NEXT:    ret i1 true
2849   %s = lshr exact i4 %x, 3
2850   %c = icmp ult i4 %s, 8
2851   ret i1 %c
2854 define i1 @lshrult_03_09_exact(i4 %x) {
2855 ; CHECK-LABEL: @lshrult_03_09_exact(
2856 ; CHECK-NEXT:    ret i1 true
2858   %s = lshr exact i4 %x, 3
2859   %c = icmp ult i4 %s, 9
2860   ret i1 %c
2863 define i1 @lshrult_03_10_exact(i4 %x) {
2864 ; CHECK-LABEL: @lshrult_03_10_exact(
2865 ; CHECK-NEXT:    ret i1 true
2867   %s = lshr exact i4 %x, 3
2868   %c = icmp ult i4 %s, 10
2869   ret i1 %c
2872 define i1 @lshrult_03_11_exact(i4 %x) {
2873 ; CHECK-LABEL: @lshrult_03_11_exact(
2874 ; CHECK-NEXT:    ret i1 true
2876   %s = lshr exact i4 %x, 3
2877   %c = icmp ult i4 %s, 11
2878   ret i1 %c
2881 define i1 @lshrult_03_12_exact(i4 %x) {
2882 ; CHECK-LABEL: @lshrult_03_12_exact(
2883 ; CHECK-NEXT:    ret i1 true
2885   %s = lshr exact i4 %x, 3
2886   %c = icmp ult i4 %s, 12
2887   ret i1 %c
2890 define i1 @lshrult_03_13_exact(i4 %x) {
2891 ; CHECK-LABEL: @lshrult_03_13_exact(
2892 ; CHECK-NEXT:    ret i1 true
2894   %s = lshr exact i4 %x, 3
2895   %c = icmp ult i4 %s, 13
2896   ret i1 %c
2899 define i1 @lshrult_03_14_exact(i4 %x) {
2900 ; CHECK-LABEL: @lshrult_03_14_exact(
2901 ; CHECK-NEXT:    ret i1 true
2903   %s = lshr exact i4 %x, 3
2904   %c = icmp ult i4 %s, 14
2905   ret i1 %c
2908 define i1 @lshrult_03_15_exact(i4 %x) {
2909 ; CHECK-LABEL: @lshrult_03_15_exact(
2910 ; CHECK-NEXT:    ret i1 true
2912   %s = lshr exact i4 %x, 3
2913   %c = icmp ult i4 %s, 15
2914   ret i1 %c
2917 define i1 @ashrsgt_01_00_exact(i4 %x) {
2918 ; CHECK-LABEL: @ashrsgt_01_00_exact(
2919 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 0
2920 ; CHECK-NEXT:    ret i1 [[C]]
2922   %s = ashr exact i4 %x, 1
2923   %c = icmp sgt i4 %s, 0
2924   ret i1 %c
2927 define i1 @ashrsgt_01_01_exact(i4 %x) {
2928 ; CHECK-LABEL: @ashrsgt_01_01_exact(
2929 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 2
2930 ; CHECK-NEXT:    ret i1 [[C]]
2932   %s = ashr exact i4 %x, 1
2933   %c = icmp sgt i4 %s, 1
2934   ret i1 %c
2937 define i1 @ashrsgt_01_02_exact(i4 %x) {
2938 ; CHECK-LABEL: @ashrsgt_01_02_exact(
2939 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 4
2940 ; CHECK-NEXT:    ret i1 [[C]]
2942   %s = ashr exact i4 %x, 1
2943   %c = icmp sgt i4 %s, 2
2944   ret i1 %c
2947 define i1 @ashrsgt_01_03_exact(i4 %x) {
2948 ; CHECK-LABEL: @ashrsgt_01_03_exact(
2949 ; CHECK-NEXT:    ret i1 false
2951   %s = ashr exact i4 %x, 1
2952   %c = icmp sgt i4 %s, 3
2953   ret i1 %c
2956 define i1 @ashrsgt_01_04_exact(i4 %x) {
2957 ; CHECK-LABEL: @ashrsgt_01_04_exact(
2958 ; CHECK-NEXT:    ret i1 false
2960   %s = ashr exact i4 %x, 1
2961   %c = icmp sgt i4 %s, 4
2962   ret i1 %c
2965 define i1 @ashrsgt_01_05_exact(i4 %x) {
2966 ; CHECK-LABEL: @ashrsgt_01_05_exact(
2967 ; CHECK-NEXT:    ret i1 false
2969   %s = ashr exact i4 %x, 1
2970   %c = icmp sgt i4 %s, 5
2971   ret i1 %c
2974 define i1 @ashrsgt_01_06_exact(i4 %x) {
2975 ; CHECK-LABEL: @ashrsgt_01_06_exact(
2976 ; CHECK-NEXT:    ret i1 false
2978   %s = ashr exact i4 %x, 1
2979   %c = icmp sgt i4 %s, 6
2980   ret i1 %c
2983 define i1 @ashrsgt_01_07_exact(i4 %x) {
2984 ; CHECK-LABEL: @ashrsgt_01_07_exact(
2985 ; CHECK-NEXT:    ret i1 false
2987   %s = ashr exact i4 %x, 1
2988   %c = icmp sgt i4 %s, 7
2989   ret i1 %c
2992 define i1 @ashrsgt_01_08_exact(i4 %x) {
2993 ; CHECK-LABEL: @ashrsgt_01_08_exact(
2994 ; CHECK-NEXT:    ret i1 true
2996   %s = ashr exact i4 %x, 1
2997   %c = icmp sgt i4 %s, 8
2998   ret i1 %c
3001 define i1 @ashrsgt_01_09_exact(i4 %x) {
3002 ; CHECK-LABEL: @ashrsgt_01_09_exact(
3003 ; CHECK-NEXT:    ret i1 true
3005   %s = ashr exact i4 %x, 1
3006   %c = icmp sgt i4 %s, 9
3007   ret i1 %c
3010 define i1 @ashrsgt_01_10_exact(i4 %x) {
3011 ; CHECK-LABEL: @ashrsgt_01_10_exact(
3012 ; CHECK-NEXT:    ret i1 true
3014   %s = ashr exact i4 %x, 1
3015   %c = icmp sgt i4 %s, 10
3016   ret i1 %c
3019 define i1 @ashrsgt_01_11_exact(i4 %x) {
3020 ; CHECK-LABEL: @ashrsgt_01_11_exact(
3021 ; CHECK-NEXT:    ret i1 true
3023   %s = ashr exact i4 %x, 1
3024   %c = icmp sgt i4 %s, 11
3025   ret i1 %c
3028 define i1 @ashrsgt_01_12_exact(i4 %x) {
3029 ; CHECK-LABEL: @ashrsgt_01_12_exact(
3030 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], -8
3031 ; CHECK-NEXT:    ret i1 [[C]]
3033   %s = ashr exact i4 %x, 1
3034   %c = icmp sgt i4 %s, 12
3035   ret i1 %c
3038 define i1 @ashrsgt_01_13_exact(i4 %x) {
3039 ; CHECK-LABEL: @ashrsgt_01_13_exact(
3040 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -6
3041 ; CHECK-NEXT:    ret i1 [[C]]
3043   %s = ashr exact i4 %x, 1
3044   %c = icmp sgt i4 %s, 13
3045   ret i1 %c
3048 define i1 @ashrsgt_01_14_exact(i4 %x) {
3049 ; CHECK-LABEL: @ashrsgt_01_14_exact(
3050 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -4
3051 ; CHECK-NEXT:    ret i1 [[C]]
3053   %s = ashr exact i4 %x, 1
3054   %c = icmp sgt i4 %s, 14
3055   ret i1 %c
3058 define i1 @ashrsgt_01_15_exact(i4 %x) {
3059 ; CHECK-LABEL: @ashrsgt_01_15_exact(
3060 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
3061 ; CHECK-NEXT:    ret i1 [[C]]
3063   %s = ashr exact i4 %x, 1
3064   %c = icmp sgt i4 %s, 15
3065   ret i1 %c
3068 define i1 @ashrsgt_02_00_exact(i4 %x) {
3069 ; CHECK-LABEL: @ashrsgt_02_00_exact(
3070 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], 0
3071 ; CHECK-NEXT:    ret i1 [[C]]
3073   %s = ashr exact i4 %x, 2
3074   %c = icmp sgt i4 %s, 0
3075   ret i1 %c
3078 define i1 @ashrsgt_02_01_exact(i4 %x) {
3079 ; CHECK-LABEL: @ashrsgt_02_01_exact(
3080 ; CHECK-NEXT:    ret i1 false
3082   %s = ashr exact i4 %x, 2
3083   %c = icmp sgt i4 %s, 1
3084   ret i1 %c
3087 define i1 @ashrsgt_02_02_exact(i4 %x) {
3088 ; CHECK-LABEL: @ashrsgt_02_02_exact(
3089 ; CHECK-NEXT:    ret i1 false
3091   %s = ashr exact i4 %x, 2
3092   %c = icmp sgt i4 %s, 2
3093   ret i1 %c
3096 define i1 @ashrsgt_02_03_exact(i4 %x) {
3097 ; CHECK-LABEL: @ashrsgt_02_03_exact(
3098 ; CHECK-NEXT:    ret i1 false
3100   %s = ashr exact i4 %x, 2
3101   %c = icmp sgt i4 %s, 3
3102   ret i1 %c
3105 define i1 @ashrsgt_02_04_exact(i4 %x) {
3106 ; CHECK-LABEL: @ashrsgt_02_04_exact(
3107 ; CHECK-NEXT:    ret i1 false
3109   %s = ashr exact i4 %x, 2
3110   %c = icmp sgt i4 %s, 4
3111   ret i1 %c
3114 define i1 @ashrsgt_02_05_exact(i4 %x) {
3115 ; CHECK-LABEL: @ashrsgt_02_05_exact(
3116 ; CHECK-NEXT:    ret i1 false
3118   %s = ashr exact i4 %x, 2
3119   %c = icmp sgt i4 %s, 5
3120   ret i1 %c
3123 define i1 @ashrsgt_02_06_exact(i4 %x) {
3124 ; CHECK-LABEL: @ashrsgt_02_06_exact(
3125 ; CHECK-NEXT:    ret i1 false
3127   %s = ashr exact i4 %x, 2
3128   %c = icmp sgt i4 %s, 6
3129   ret i1 %c
3132 define i1 @ashrsgt_02_07_exact(i4 %x) {
3133 ; CHECK-LABEL: @ashrsgt_02_07_exact(
3134 ; CHECK-NEXT:    ret i1 false
3136   %s = ashr exact i4 %x, 2
3137   %c = icmp sgt i4 %s, 7
3138   ret i1 %c
3141 define i1 @ashrsgt_02_08_exact(i4 %x) {
3142 ; CHECK-LABEL: @ashrsgt_02_08_exact(
3143 ; CHECK-NEXT:    ret i1 true
3145   %s = ashr exact i4 %x, 2
3146   %c = icmp sgt i4 %s, 8
3147   ret i1 %c
3150 define i1 @ashrsgt_02_09_exact(i4 %x) {
3151 ; CHECK-LABEL: @ashrsgt_02_09_exact(
3152 ; CHECK-NEXT:    ret i1 true
3154   %s = ashr exact i4 %x, 2
3155   %c = icmp sgt i4 %s, 9
3156   ret i1 %c
3159 define i1 @ashrsgt_02_10_exact(i4 %x) {
3160 ; CHECK-LABEL: @ashrsgt_02_10_exact(
3161 ; CHECK-NEXT:    ret i1 true
3163   %s = ashr exact i4 %x, 2
3164   %c = icmp sgt i4 %s, 10
3165   ret i1 %c
3168 define i1 @ashrsgt_02_11_exact(i4 %x) {
3169 ; CHECK-LABEL: @ashrsgt_02_11_exact(
3170 ; CHECK-NEXT:    ret i1 true
3172   %s = ashr exact i4 %x, 2
3173   %c = icmp sgt i4 %s, 11
3174   ret i1 %c
3177 define i1 @ashrsgt_02_12_exact(i4 %x) {
3178 ; CHECK-LABEL: @ashrsgt_02_12_exact(
3179 ; CHECK-NEXT:    ret i1 true
3181   %s = ashr exact i4 %x, 2
3182   %c = icmp sgt i4 %s, 12
3183   ret i1 %c
3186 define i1 @ashrsgt_02_13_exact(i4 %x) {
3187 ; CHECK-LABEL: @ashrsgt_02_13_exact(
3188 ; CHECK-NEXT:    ret i1 true
3190   %s = ashr exact i4 %x, 2
3191   %c = icmp sgt i4 %s, 13
3192   ret i1 %c
3195 define i1 @ashrsgt_02_14_exact(i4 %x) {
3196 ; CHECK-LABEL: @ashrsgt_02_14_exact(
3197 ; CHECK-NEXT:    [[C:%.*]] = icmp ne i4 [[X:%.*]], -8
3198 ; CHECK-NEXT:    ret i1 [[C]]
3200   %s = ashr exact i4 %x, 2
3201   %c = icmp sgt i4 %s, 14
3202   ret i1 %c
3205 define i1 @ashrsgt_02_15_exact(i4 %x) {
3206 ; CHECK-LABEL: @ashrsgt_02_15_exact(
3207 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
3208 ; CHECK-NEXT:    ret i1 [[C]]
3210   %s = ashr exact i4 %x, 2
3211   %c = icmp sgt i4 %s, 15
3212   ret i1 %c
3215 define i1 @ashrsgt_03_00_exact(i4 %x) {
3216 ; CHECK-LABEL: @ashrsgt_03_00_exact(
3217 ; CHECK-NEXT:    ret i1 false
3219   %s = ashr exact i4 %x, 3
3220   %c = icmp sgt i4 %s, 0
3221   ret i1 %c
3224 define i1 @ashrsgt_03_01_exact(i4 %x) {
3225 ; CHECK-LABEL: @ashrsgt_03_01_exact(
3226 ; CHECK-NEXT:    ret i1 false
3228   %s = ashr exact i4 %x, 3
3229   %c = icmp sgt i4 %s, 1
3230   ret i1 %c
3233 define i1 @ashrsgt_03_02_exact(i4 %x) {
3234 ; CHECK-LABEL: @ashrsgt_03_02_exact(
3235 ; CHECK-NEXT:    ret i1 false
3237   %s = ashr exact i4 %x, 3
3238   %c = icmp sgt i4 %s, 2
3239   ret i1 %c
3242 define i1 @ashrsgt_03_03_exact(i4 %x) {
3243 ; CHECK-LABEL: @ashrsgt_03_03_exact(
3244 ; CHECK-NEXT:    ret i1 false
3246   %s = ashr exact i4 %x, 3
3247   %c = icmp sgt i4 %s, 3
3248   ret i1 %c
3251 define i1 @ashrsgt_03_04_exact(i4 %x) {
3252 ; CHECK-LABEL: @ashrsgt_03_04_exact(
3253 ; CHECK-NEXT:    ret i1 false
3255   %s = ashr exact i4 %x, 3
3256   %c = icmp sgt i4 %s, 4
3257   ret i1 %c
3260 define i1 @ashrsgt_03_05_exact(i4 %x) {
3261 ; CHECK-LABEL: @ashrsgt_03_05_exact(
3262 ; CHECK-NEXT:    ret i1 false
3264   %s = ashr exact i4 %x, 3
3265   %c = icmp sgt i4 %s, 5
3266   ret i1 %c
3269 define i1 @ashrsgt_03_06_exact(i4 %x) {
3270 ; CHECK-LABEL: @ashrsgt_03_06_exact(
3271 ; CHECK-NEXT:    ret i1 false
3273   %s = ashr exact i4 %x, 3
3274   %c = icmp sgt i4 %s, 6
3275   ret i1 %c
3278 define i1 @ashrsgt_03_07_exact(i4 %x) {
3279 ; CHECK-LABEL: @ashrsgt_03_07_exact(
3280 ; CHECK-NEXT:    ret i1 false
3282   %s = ashr exact i4 %x, 3
3283   %c = icmp sgt i4 %s, 7
3284   ret i1 %c
3287 define i1 @ashrsgt_03_08_exact(i4 %x) {
3288 ; CHECK-LABEL: @ashrsgt_03_08_exact(
3289 ; CHECK-NEXT:    ret i1 true
3291   %s = ashr exact i4 %x, 3
3292   %c = icmp sgt i4 %s, 8
3293   ret i1 %c
3296 define i1 @ashrsgt_03_09_exact(i4 %x) {
3297 ; CHECK-LABEL: @ashrsgt_03_09_exact(
3298 ; CHECK-NEXT:    ret i1 true
3300   %s = ashr exact i4 %x, 3
3301   %c = icmp sgt i4 %s, 9
3302   ret i1 %c
3305 define i1 @ashrsgt_03_10_exact(i4 %x) {
3306 ; CHECK-LABEL: @ashrsgt_03_10_exact(
3307 ; CHECK-NEXT:    ret i1 true
3309   %s = ashr exact i4 %x, 3
3310   %c = icmp sgt i4 %s, 10
3311   ret i1 %c
3314 define i1 @ashrsgt_03_11_exact(i4 %x) {
3315 ; CHECK-LABEL: @ashrsgt_03_11_exact(
3316 ; CHECK-NEXT:    ret i1 true
3318   %s = ashr exact i4 %x, 3
3319   %c = icmp sgt i4 %s, 11
3320   ret i1 %c
3323 define i1 @ashrsgt_03_12_exact(i4 %x) {
3324 ; CHECK-LABEL: @ashrsgt_03_12_exact(
3325 ; CHECK-NEXT:    ret i1 true
3327   %s = ashr exact i4 %x, 3
3328   %c = icmp sgt i4 %s, 12
3329   ret i1 %c
3332 define i1 @ashrsgt_03_13_exact(i4 %x) {
3333 ; CHECK-LABEL: @ashrsgt_03_13_exact(
3334 ; CHECK-NEXT:    ret i1 true
3336   %s = ashr exact i4 %x, 3
3337   %c = icmp sgt i4 %s, 13
3338   ret i1 %c
3341 define i1 @ashrsgt_03_14_exact(i4 %x) {
3342 ; CHECK-LABEL: @ashrsgt_03_14_exact(
3343 ; CHECK-NEXT:    ret i1 true
3345   %s = ashr exact i4 %x, 3
3346   %c = icmp sgt i4 %s, 14
3347   ret i1 %c
3350 define i1 @ashrsgt_03_15_exact(i4 %x) {
3351 ; CHECK-LABEL: @ashrsgt_03_15_exact(
3352 ; CHECK-NEXT:    [[C:%.*]] = icmp sgt i4 [[X:%.*]], -1
3353 ; CHECK-NEXT:    ret i1 [[C]]
3355   %s = ashr exact i4 %x, 3
3356   %c = icmp sgt i4 %s, 15
3357   ret i1 %c
3360 define i1 @ashrslt_01_00_exact(i4 %x) {
3361 ; CHECK-LABEL: @ashrslt_01_00_exact(
3362 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
3363 ; CHECK-NEXT:    ret i1 [[C]]
3365   %s = ashr exact i4 %x, 1
3366   %c = icmp slt i4 %s, 0
3367   ret i1 %c
3370 define i1 @ashrslt_01_01_exact(i4 %x) {
3371 ; CHECK-LABEL: @ashrslt_01_01_exact(
3372 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 2
3373 ; CHECK-NEXT:    ret i1 [[C]]
3375   %s = ashr exact i4 %x, 1
3376   %c = icmp slt i4 %s, 1
3377   ret i1 %c
3380 define i1 @ashrslt_01_02_exact(i4 %x) {
3381 ; CHECK-LABEL: @ashrslt_01_02_exact(
3382 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 4
3383 ; CHECK-NEXT:    ret i1 [[C]]
3385   %s = ashr exact i4 %x, 1
3386   %c = icmp slt i4 %s, 2
3387   ret i1 %c
3390 define i1 @ashrslt_01_03_exact(i4 %x) {
3391 ; CHECK-LABEL: @ashrslt_01_03_exact(
3392 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 6
3393 ; CHECK-NEXT:    ret i1 [[C]]
3395   %s = ashr exact i4 %x, 1
3396   %c = icmp slt i4 %s, 3
3397   ret i1 %c
3400 define i1 @ashrslt_01_04_exact(i4 %x) {
3401 ; CHECK-LABEL: @ashrslt_01_04_exact(
3402 ; CHECK-NEXT:    ret i1 true
3404   %s = ashr exact i4 %x, 1
3405   %c = icmp slt i4 %s, 4
3406   ret i1 %c
3409 define i1 @ashrslt_01_05_exact(i4 %x) {
3410 ; CHECK-LABEL: @ashrslt_01_05_exact(
3411 ; CHECK-NEXT:    ret i1 true
3413   %s = ashr exact i4 %x, 1
3414   %c = icmp slt i4 %s, 5
3415   ret i1 %c
3418 define i1 @ashrslt_01_06_exact(i4 %x) {
3419 ; CHECK-LABEL: @ashrslt_01_06_exact(
3420 ; CHECK-NEXT:    ret i1 true
3422   %s = ashr exact i4 %x, 1
3423   %c = icmp slt i4 %s, 6
3424   ret i1 %c
3427 define i1 @ashrslt_01_07_exact(i4 %x) {
3428 ; CHECK-LABEL: @ashrslt_01_07_exact(
3429 ; CHECK-NEXT:    ret i1 true
3431   %s = ashr exact i4 %x, 1
3432   %c = icmp slt i4 %s, 7
3433   ret i1 %c
3436 define i1 @ashrslt_01_08_exact(i4 %x) {
3437 ; CHECK-LABEL: @ashrslt_01_08_exact(
3438 ; CHECK-NEXT:    ret i1 false
3440   %s = ashr exact i4 %x, 1
3441   %c = icmp slt i4 %s, 8
3442   ret i1 %c
3445 define i1 @ashrslt_01_09_exact(i4 %x) {
3446 ; CHECK-LABEL: @ashrslt_01_09_exact(
3447 ; CHECK-NEXT:    ret i1 false
3449   %s = ashr exact i4 %x, 1
3450   %c = icmp slt i4 %s, 9
3451   ret i1 %c
3454 define i1 @ashrslt_01_10_exact(i4 %x) {
3455 ; CHECK-LABEL: @ashrslt_01_10_exact(
3456 ; CHECK-NEXT:    ret i1 false
3458   %s = ashr exact i4 %x, 1
3459   %c = icmp slt i4 %s, 10
3460   ret i1 %c
3463 define i1 @ashrslt_01_11_exact(i4 %x) {
3464 ; CHECK-LABEL: @ashrslt_01_11_exact(
3465 ; CHECK-NEXT:    ret i1 false
3467   %s = ashr exact i4 %x, 1
3468   %c = icmp slt i4 %s, 11
3469   ret i1 %c
3472 define i1 @ashrslt_01_12_exact(i4 %x) {
3473 ; CHECK-LABEL: @ashrslt_01_12_exact(
3474 ; CHECK-NEXT:    ret i1 false
3476   %s = ashr exact i4 %x, 1
3477   %c = icmp slt i4 %s, 12
3478   ret i1 %c
3481 define i1 @ashrslt_01_13_exact(i4 %x) {
3482 ; CHECK-LABEL: @ashrslt_01_13_exact(
3483 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -6
3484 ; CHECK-NEXT:    ret i1 [[C]]
3486   %s = ashr exact i4 %x, 1
3487   %c = icmp slt i4 %s, 13
3488   ret i1 %c
3491 define i1 @ashrslt_01_14_exact(i4 %x) {
3492 ; CHECK-LABEL: @ashrslt_01_14_exact(
3493 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -4
3494 ; CHECK-NEXT:    ret i1 [[C]]
3496   %s = ashr exact i4 %x, 1
3497   %c = icmp slt i4 %s, 14
3498   ret i1 %c
3501 define i1 @ashrslt_01_15_exact(i4 %x) {
3502 ; CHECK-LABEL: @ashrslt_01_15_exact(
3503 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -2
3504 ; CHECK-NEXT:    ret i1 [[C]]
3506   %s = ashr exact i4 %x, 1
3507   %c = icmp slt i4 %s, 15
3508   ret i1 %c
3511 define i1 @ashrslt_02_00_exact(i4 %x) {
3512 ; CHECK-LABEL: @ashrslt_02_00_exact(
3513 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
3514 ; CHECK-NEXT:    ret i1 [[C]]
3516   %s = ashr exact i4 %x, 2
3517   %c = icmp slt i4 %s, 0
3518   ret i1 %c
3521 define i1 @ashrslt_02_01_exact(i4 %x) {
3522 ; CHECK-LABEL: @ashrslt_02_01_exact(
3523 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 4
3524 ; CHECK-NEXT:    ret i1 [[C]]
3526   %s = ashr exact i4 %x, 2
3527   %c = icmp slt i4 %s, 1
3528   ret i1 %c
3531 define i1 @ashrslt_02_02_exact(i4 %x) {
3532 ; CHECK-LABEL: @ashrslt_02_02_exact(
3533 ; CHECK-NEXT:    ret i1 true
3535   %s = ashr exact i4 %x, 2
3536   %c = icmp slt i4 %s, 2
3537   ret i1 %c
3540 define i1 @ashrslt_02_03_exact(i4 %x) {
3541 ; CHECK-LABEL: @ashrslt_02_03_exact(
3542 ; CHECK-NEXT:    ret i1 true
3544   %s = ashr exact i4 %x, 2
3545   %c = icmp slt i4 %s, 3
3546   ret i1 %c
3549 define i1 @ashrslt_02_04_exact(i4 %x) {
3550 ; CHECK-LABEL: @ashrslt_02_04_exact(
3551 ; CHECK-NEXT:    ret i1 true
3553   %s = ashr exact i4 %x, 2
3554   %c = icmp slt i4 %s, 4
3555   ret i1 %c
3558 define i1 @ashrslt_02_05_exact(i4 %x) {
3559 ; CHECK-LABEL: @ashrslt_02_05_exact(
3560 ; CHECK-NEXT:    ret i1 true
3562   %s = ashr exact i4 %x, 2
3563   %c = icmp slt i4 %s, 5
3564   ret i1 %c
3567 define i1 @ashrslt_02_06_exact(i4 %x) {
3568 ; CHECK-LABEL: @ashrslt_02_06_exact(
3569 ; CHECK-NEXT:    ret i1 true
3571   %s = ashr exact i4 %x, 2
3572   %c = icmp slt i4 %s, 6
3573   ret i1 %c
3576 define i1 @ashrslt_02_07_exact(i4 %x) {
3577 ; CHECK-LABEL: @ashrslt_02_07_exact(
3578 ; CHECK-NEXT:    ret i1 true
3580   %s = ashr exact i4 %x, 2
3581   %c = icmp slt i4 %s, 7
3582   ret i1 %c
3585 define i1 @ashrslt_02_08_exact(i4 %x) {
3586 ; CHECK-LABEL: @ashrslt_02_08_exact(
3587 ; CHECK-NEXT:    ret i1 false
3589   %s = ashr exact i4 %x, 2
3590   %c = icmp slt i4 %s, 8
3591   ret i1 %c
3594 define i1 @ashrslt_02_09_exact(i4 %x) {
3595 ; CHECK-LABEL: @ashrslt_02_09_exact(
3596 ; CHECK-NEXT:    ret i1 false
3598   %s = ashr exact i4 %x, 2
3599   %c = icmp slt i4 %s, 9
3600   ret i1 %c
3603 define i1 @ashrslt_02_10_exact(i4 %x) {
3604 ; CHECK-LABEL: @ashrslt_02_10_exact(
3605 ; CHECK-NEXT:    ret i1 false
3607   %s = ashr exact i4 %x, 2
3608   %c = icmp slt i4 %s, 10
3609   ret i1 %c
3612 define i1 @ashrslt_02_11_exact(i4 %x) {
3613 ; CHECK-LABEL: @ashrslt_02_11_exact(
3614 ; CHECK-NEXT:    ret i1 false
3616   %s = ashr exact i4 %x, 2
3617   %c = icmp slt i4 %s, 11
3618   ret i1 %c
3621 define i1 @ashrslt_02_12_exact(i4 %x) {
3622 ; CHECK-LABEL: @ashrslt_02_12_exact(
3623 ; CHECK-NEXT:    ret i1 false
3625   %s = ashr exact i4 %x, 2
3626   %c = icmp slt i4 %s, 12
3627   ret i1 %c
3630 define i1 @ashrslt_02_13_exact(i4 %x) {
3631 ; CHECK-LABEL: @ashrslt_02_13_exact(
3632 ; CHECK-NEXT:    ret i1 false
3634   %s = ashr exact i4 %x, 2
3635   %c = icmp slt i4 %s, 13
3636   ret i1 %c
3639 define i1 @ashrslt_02_14_exact(i4 %x) {
3640 ; CHECK-LABEL: @ashrslt_02_14_exact(
3641 ; CHECK-NEXT:    ret i1 false
3643   %s = ashr exact i4 %x, 2
3644   %c = icmp slt i4 %s, 14
3645   ret i1 %c
3648 define i1 @ashrslt_02_15_exact(i4 %x) {
3649 ; CHECK-LABEL: @ashrslt_02_15_exact(
3650 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], -4
3651 ; CHECK-NEXT:    ret i1 [[C]]
3653   %s = ashr exact i4 %x, 2
3654   %c = icmp slt i4 %s, 15
3655   ret i1 %c
3658 define i1 @ashrslt_03_00_exact(i4 %x) {
3659 ; CHECK-LABEL: @ashrslt_03_00_exact(
3660 ; CHECK-NEXT:    [[C:%.*]] = icmp slt i4 [[X:%.*]], 0
3661 ; CHECK-NEXT:    ret i1 [[C]]
3663   %s = ashr exact i4 %x, 3
3664   %c = icmp slt i4 %s, 0
3665   ret i1 %c
3668 define i1 @ashrslt_03_01_exact(i4 %x) {
3669 ; CHECK-LABEL: @ashrslt_03_01_exact(
3670 ; CHECK-NEXT:    ret i1 true
3672   %s = ashr exact i4 %x, 3
3673   %c = icmp slt i4 %s, 1
3674   ret i1 %c
3677 define i1 @ashrslt_03_02_exact(i4 %x) {
3678 ; CHECK-LABEL: @ashrslt_03_02_exact(
3679 ; CHECK-NEXT:    ret i1 true
3681   %s = ashr exact i4 %x, 3
3682   %c = icmp slt i4 %s, 2
3683   ret i1 %c
3686 define i1 @ashrslt_03_03_exact(i4 %x) {
3687 ; CHECK-LABEL: @ashrslt_03_03_exact(
3688 ; CHECK-NEXT:    ret i1 true
3690   %s = ashr exact i4 %x, 3
3691   %c = icmp slt i4 %s, 3
3692   ret i1 %c
3695 define i1 @ashrslt_03_04_exact(i4 %x) {
3696 ; CHECK-LABEL: @ashrslt_03_04_exact(
3697 ; CHECK-NEXT:    ret i1 true
3699   %s = ashr exact i4 %x, 3
3700   %c = icmp slt i4 %s, 4
3701   ret i1 %c
3704 define i1 @ashrslt_03_05_exact(i4 %x) {
3705 ; CHECK-LABEL: @ashrslt_03_05_exact(
3706 ; CHECK-NEXT:    ret i1 true
3708   %s = ashr exact i4 %x, 3
3709   %c = icmp slt i4 %s, 5
3710   ret i1 %c
3713 define i1 @ashrslt_03_06_exact(i4 %x) {
3714 ; CHECK-LABEL: @ashrslt_03_06_exact(
3715 ; CHECK-NEXT:    ret i1 true
3717   %s = ashr exact i4 %x, 3
3718   %c = icmp slt i4 %s, 6
3719   ret i1 %c
3722 define i1 @ashrslt_03_07_exact(i4 %x) {
3723 ; CHECK-LABEL: @ashrslt_03_07_exact(
3724 ; CHECK-NEXT:    ret i1 true
3726   %s = ashr exact i4 %x, 3
3727   %c = icmp slt i4 %s, 7
3728   ret i1 %c
3731 define i1 @ashrslt_03_08_exact(i4 %x) {
3732 ; CHECK-LABEL: @ashrslt_03_08_exact(
3733 ; CHECK-NEXT:    ret i1 false
3735   %s = ashr exact i4 %x, 3
3736   %c = icmp slt i4 %s, 8
3737   ret i1 %c
3740 define i1 @ashrslt_03_09_exact(i4 %x) {
3741 ; CHECK-LABEL: @ashrslt_03_09_exact(
3742 ; CHECK-NEXT:    ret i1 false
3744   %s = ashr exact i4 %x, 3
3745   %c = icmp slt i4 %s, 9
3746   ret i1 %c
3749 define i1 @ashrslt_03_10_exact(i4 %x) {
3750 ; CHECK-LABEL: @ashrslt_03_10_exact(
3751 ; CHECK-NEXT:    ret i1 false
3753   %s = ashr exact i4 %x, 3
3754   %c = icmp slt i4 %s, 10
3755   ret i1 %c
3758 define i1 @ashrslt_03_11_exact(i4 %x) {
3759 ; CHECK-LABEL: @ashrslt_03_11_exact(
3760 ; CHECK-NEXT:    ret i1 false
3762   %s = ashr exact i4 %x, 3
3763   %c = icmp slt i4 %s, 11
3764   ret i1 %c
3767 define i1 @ashrslt_03_12_exact(i4 %x) {
3768 ; CHECK-LABEL: @ashrslt_03_12_exact(
3769 ; CHECK-NEXT:    ret i1 false
3771   %s = ashr exact i4 %x, 3
3772   %c = icmp slt i4 %s, 12
3773   ret i1 %c
3776 define i1 @ashrslt_03_13_exact(i4 %x) {
3777 ; CHECK-LABEL: @ashrslt_03_13_exact(
3778 ; CHECK-NEXT:    ret i1 false
3780   %s = ashr exact i4 %x, 3
3781   %c = icmp slt i4 %s, 13
3782   ret i1 %c
3785 define i1 @ashrslt_03_14_exact(i4 %x) {
3786 ; CHECK-LABEL: @ashrslt_03_14_exact(
3787 ; CHECK-NEXT:    ret i1 false
3789   %s = ashr exact i4 %x, 3
3790   %c = icmp slt i4 %s, 14
3791   ret i1 %c
3794 define i1 @ashrslt_03_15_exact(i4 %x) {
3795 ; CHECK-LABEL: @ashrslt_03_15_exact(
3796 ; CHECK-NEXT:    ret i1 false
3798   %s = ashr exact i4 %x, 3
3799   %c = icmp slt i4 %s, 15
3800   ret i1 %c