--- /dev/null
+; RUN: opt < %s -instcombine -S | FileCheck %s
+
+define i1 @lshrugt_01_00(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_00(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_01(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_01(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_02(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_02(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 5
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_03(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_03(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_04(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_04(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -7
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_05(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_05(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -5
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_06(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_06(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_07(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_08(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_09(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_10(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_11(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_12(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_13(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_13(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_14(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_14(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_01_15(i4 %x) {
+; CHECK-LABEL: @lshrugt_01_15(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_00(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_00(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, 3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_01(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_01(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_02(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_02(
+; CHECK-NEXT: [[C:%.*]] = icmp ugt i4 %x, -5
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_03(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_03(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_04(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_04(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_05(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_05(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_06(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_06(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_07(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_08(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_09(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_10(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_11(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_12(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_13(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_13(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_14(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_14(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_02_15(i4 %x) {
+; CHECK-LABEL: @lshrugt_02_15(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_00(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_00(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_01(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_01(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_02(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_02(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_03(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_03(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_04(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_04(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_05(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_05(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_06(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_06(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_07(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_08(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_09(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_10(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_11(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_12(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_13(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_13(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_14(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_14(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrugt_03_15(i4 %x) {
+; CHECK-LABEL: @lshrugt_03_15(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ugt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_01_00(i4 %x) {
+; CHECK-LABEL: @lshrult_01_00(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_01_01(i4 %x) {
+; CHECK-LABEL: @lshrult_01_01(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_01_02(i4 %x) {
+; CHECK-LABEL: @lshrult_01_02(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_01_03(i4 %x) {
+; CHECK-LABEL: @lshrult_01_03(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_01_04(i4 %x) {
+; CHECK-LABEL: @lshrult_01_04(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_01_05(i4 %x) {
+; CHECK-LABEL: @lshrult_01_05(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -6
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_01_06(i4 %x) {
+; CHECK-LABEL: @lshrult_01_06(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_01_07(i4 %x) {
+; CHECK-LABEL: @lshrult_01_07(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_01_08(i4 %x) {
+; CHECK-LABEL: @lshrult_01_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_01_09(i4 %x) {
+; CHECK-LABEL: @lshrult_01_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_01_10(i4 %x) {
+; CHECK-LABEL: @lshrult_01_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_01_11(i4 %x) {
+; CHECK-LABEL: @lshrult_01_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_01_12(i4 %x) {
+; CHECK-LABEL: @lshrult_01_12(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_01_13(i4 %x) {
+; CHECK-LABEL: @lshrult_01_13(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_01_14(i4 %x) {
+; CHECK-LABEL: @lshrult_01_14(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_01_15(i4 %x) {
+; CHECK-LABEL: @lshrult_01_15(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 1
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_02_00(i4 %x) {
+; CHECK-LABEL: @lshrult_02_00(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_02_01(i4 %x) {
+; CHECK-LABEL: @lshrult_02_01(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, 4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_02_02(i4 %x) {
+; CHECK-LABEL: @lshrult_02_02(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_02_03(i4 %x) {
+; CHECK-LABEL: @lshrult_02_03(
+; CHECK-NEXT: [[C:%.*]] = icmp ult i4 %x, -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_02_04(i4 %x) {
+; CHECK-LABEL: @lshrult_02_04(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_02_05(i4 %x) {
+; CHECK-LABEL: @lshrult_02_05(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_02_06(i4 %x) {
+; CHECK-LABEL: @lshrult_02_06(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_02_07(i4 %x) {
+; CHECK-LABEL: @lshrult_02_07(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_02_08(i4 %x) {
+; CHECK-LABEL: @lshrult_02_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_02_09(i4 %x) {
+; CHECK-LABEL: @lshrult_02_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_02_10(i4 %x) {
+; CHECK-LABEL: @lshrult_02_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_02_11(i4 %x) {
+; CHECK-LABEL: @lshrult_02_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_02_12(i4 %x) {
+; CHECK-LABEL: @lshrult_02_12(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_02_13(i4 %x) {
+; CHECK-LABEL: @lshrult_02_13(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_02_14(i4 %x) {
+; CHECK-LABEL: @lshrult_02_14(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_02_15(i4 %x) {
+; CHECK-LABEL: @lshrult_02_15(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 2
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @lshrult_03_00(i4 %x) {
+; CHECK-LABEL: @lshrult_03_00(
+; CHECK-NEXT: ret i1 false
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @lshrult_03_01(i4 %x) {
+; CHECK-LABEL: @lshrult_03_01(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @lshrult_03_02(i4 %x) {
+; CHECK-LABEL: @lshrult_03_02(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @lshrult_03_03(i4 %x) {
+; CHECK-LABEL: @lshrult_03_03(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @lshrult_03_04(i4 %x) {
+; CHECK-LABEL: @lshrult_03_04(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @lshrult_03_05(i4 %x) {
+; CHECK-LABEL: @lshrult_03_05(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @lshrult_03_06(i4 %x) {
+; CHECK-LABEL: @lshrult_03_06(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @lshrult_03_07(i4 %x) {
+; CHECK-LABEL: @lshrult_03_07(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @lshrult_03_08(i4 %x) {
+; CHECK-LABEL: @lshrult_03_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @lshrult_03_09(i4 %x) {
+; CHECK-LABEL: @lshrult_03_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @lshrult_03_10(i4 %x) {
+; CHECK-LABEL: @lshrult_03_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @lshrult_03_11(i4 %x) {
+; CHECK-LABEL: @lshrult_03_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @lshrult_03_12(i4 %x) {
+; CHECK-LABEL: @lshrult_03_12(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @lshrult_03_13(i4 %x) {
+; CHECK-LABEL: @lshrult_03_13(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @lshrult_03_14(i4 %x) {
+; CHECK-LABEL: @lshrult_03_14(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @lshrult_03_15(i4 %x) {
+; CHECK-LABEL: @lshrult_03_15(
+; CHECK-NEXT: ret i1 true
+;
+ %s = lshr i4 %x, 3
+ %c = icmp ult i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_00(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_00(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_01(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_01(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], 1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_02(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_02(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_03(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_03(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_04(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_04(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_05(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_05(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_06(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_06(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_07(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_08(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_09(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_10(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_11(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_12(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_12(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], -4
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_13(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_13(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], -3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_14(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_14(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_01_15(i4 %x) {
+; CHECK-LABEL: @ashrsgt_01_15(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_00(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_00(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 2
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_01(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_01(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_02(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_02(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_03(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_03(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_04(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_04(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_05(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_05(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_06(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_06(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_07(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_08(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_09(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_10(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_11(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_12(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_12(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_13(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_13(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_14(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_14(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 2
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 [[S]], -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_02_15(i4 %x) {
+; CHECK-LABEL: @ashrsgt_02_15(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_00(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_00(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_01(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_01(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_02(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_02(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_03(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_03(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_04(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_04(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_05(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_05(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_06(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_06(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_07(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_07(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_08(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_08(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_09(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_09(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_10(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_10(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_11(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_11(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_12(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_12(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_13(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_13(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_14(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_14(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrsgt_03_15(i4 %x) {
+; CHECK-LABEL: @ashrsgt_03_15(
+; CHECK-NEXT: [[C:%.*]] = icmp sgt i4 %x, -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 3
+ %c = icmp sgt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_00(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_00(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_01(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_01(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], 1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_02(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_02(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], 2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_03(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_03(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], 3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_04(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_04(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_05(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_05(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_06(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_06(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_07(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_07(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_08(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_09(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_10(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_11(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_12(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_13(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_13(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], -3
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_14(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_14(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], -2
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_01_15(i4 %x) {
+; CHECK-LABEL: @ashrslt_01_15(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 1
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 1
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_00(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_00(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_01(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_01(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 2
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], 1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_02(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_02(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_03(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_03(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_04(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_04(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_05(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_05(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_06(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_06(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_07(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_07(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_08(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_09(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_10(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_11(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_12(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_13(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_13(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_14(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_14(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_02_15(i4 %x) {
+; CHECK-LABEL: @ashrslt_02_15(
+; CHECK-NEXT: [[S:%.*]] = ashr i4 %x, 2
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 [[S]], -1
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 2
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_00(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_00(
+; CHECK-NEXT: [[C:%.*]] = icmp slt i4 %x, 0
+; CHECK-NEXT: ret i1 [[C]]
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 0
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_01(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_01(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 1
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_02(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_02(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 2
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_03(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_03(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 3
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_04(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_04(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 4
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_05(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_05(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 5
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_06(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_06(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 6
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_07(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_07(
+; CHECK-NEXT: ret i1 true
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 7
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_08(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_08(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 8
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_09(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_09(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 9
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_10(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_10(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 10
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_11(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_11(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 11
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_12(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_12(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 12
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_13(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_13(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 13
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_14(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_14(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 14
+ ret i1 %c
+}
+
+define i1 @ashrslt_03_15(i4 %x) {
+; CHECK-LABEL: @ashrslt_03_15(
+; CHECK-NEXT: ret i1 false
+;
+ %s = ashr i4 %x, 3
+ %c = icmp slt i4 %s, 15
+ ret i1 %c
+}
+