summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanjay Patel <spatel@rotateright.com>2017-10-04 15:17:25 +0000
committerSanjay Patel <spatel@rotateright.com>2017-10-04 15:17:25 +0000
commit9366b9c53b3f3f7215afbeb8eb9c6bbbda5d93fc (patch)
treec6403359fbaabf825ea8dd392e2907f956e1a9a5
parent98eaa88357a0d9df82503f0398a7e3cef551a21f (diff)
downloadbcm5719-llvm-9366b9c53b3f3f7215afbeb8eb9c6bbbda5d93fc.tar.gz
bcm5719-llvm-9366b9c53b3f3f7215afbeb8eb9c6bbbda5d93fc.zip
[InstCombine] add 'exact' variants of all tests; NFC
We can likely remove most of these as redundant in the near future, but I'm trying to make sure I don't introduce any regressions with D38514. llvm-svn: 314907
-rw-r--r--llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll1772
1 files changed, 1772 insertions, 0 deletions
diff --git a/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll b/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll
index c641fcbf1ab..8a378717f50 100644
--- a/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll
+++ b/llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll
@@ -1788,3 +1788,1775 @@ define i1 @ashrslt_03_15(i4 %x) {
ret i1 %c
}
+define i1 @lshrugt_01_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_03_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_04_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -8
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_05_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_06_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp eq i4 %x, -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_13_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_14_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_15_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp eq i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_03_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_04_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_05_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_06_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_13_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_14_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_15_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_01_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_02_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_03_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_04_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_05_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_06_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_13_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_14_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_15_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_01_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_00_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_01_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp eq i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_01_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_01_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_03_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_01_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_04_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_01_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_05_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_01_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_06_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_01_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_07_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_01_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_01_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_01_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_01_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_01_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_12_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_01_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_13_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_01_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_14_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_01_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_01_15_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 1
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_02_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_00_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_02_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp eq i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_02_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_02_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_03_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_02_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_04_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_02_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_05_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_02_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_06_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_02_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_07_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_02_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_02_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_02_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_02_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_02_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_12_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_02_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_13_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_02_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_14_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_02_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_02_15_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 2
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_03_00_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_00_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_03_01_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, -8
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_03_02_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_02_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_03_03_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_03_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_03_04_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_04_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_03_05_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_05_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_03_06_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_06_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_03_07_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_07_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_03_08_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_03_09_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_03_10_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_03_11_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_03_12_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_12_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_03_13_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_13_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_03_14_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_14_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_03_15_exact(i4 %x) {
+; CHECK-LABEL: @lshrult_03_15_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr exact i4 %x, 3
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_03_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_04_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_05_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_06_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_12_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, -8
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_13_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_14_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_15_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_01_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_02_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_03_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_04_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_05_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_06_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_12_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_13_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_14_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp ne i4 %x, -8
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_15_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_00_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_01_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_02_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_03_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_04_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_05_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_06_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_07_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_08_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_09_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_10_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_11_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_12_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_13_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_14_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_15_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_02_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_03_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_04_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_05_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_06_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_07_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_13_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, -6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_14_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_15_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 1
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_01_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_02_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_03_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_04_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_05_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_06_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_07_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_13_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_14_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_15_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 2
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_00_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_00_exact(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_01_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_01_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_02_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_02_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_03_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_03_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_04_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_04_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_05_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_05_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_06_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_06_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_07_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_07_exact(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_08_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_08_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_09_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_09_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_10_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_10_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_11_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_11_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_12_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_12_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_13_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_13_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_14_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_14_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_15_exact(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_15_exact(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr exact i4 %x, 3
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+
OpenPOWER on IntegriCloud