ret i1 %r
}
+define i1 @icmp_eq_bool_0(ptr %ptr) {
+; CHECK-LABEL: @icmp_eq_bool_0(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG6:![0-9]+]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[VAL]], 0
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp eq i64 %val, 0
+ ret i1 %cmp
+}
+
+define i1 @icmp_eq_bool_1(ptr %ptr) {
+; CHECK-LABEL: @icmp_eq_bool_1(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG6]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[VAL]], 1
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp eq i64 %val, 1
+ ret i1 %cmp
+}
+
+define i1 @icmp_ne_bool_0(ptr %ptr) {
+; CHECK-LABEL: @icmp_ne_bool_0(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG6]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[VAL]], 0
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp ne i64 %val, 0
+ ret i1 %cmp
+}
+
+define i1 @icmp_ne_bool_1(ptr %ptr) {
+; CHECK-LABEL: @icmp_ne_bool_1(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG6]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[VAL]], 1
+; CHECK-NEXT: ret i1 [[CMP]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp ne i64 %val, 1
+ ret i1 %cmp
+}
+
!0 = !{i32 1, i32 6}
!1 = !{i32 0, i32 6}
!2 = !{i8 0, i8 1}
%r = zext i1 %c to i8
ret i8 %r
}
+
+define i64 @zext_icmp_eq_bool_0(ptr %ptr) {
+; CHECK-LABEL: @zext_icmp_eq_bool_0(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0:![0-9]+]]
+; CHECK-NEXT: [[LEN:%.*]] = xor i64 [[VAL]], 1
+; CHECK-NEXT: ret i64 [[LEN]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp eq i64 %val, 0
+ %len = zext i1 %cmp to i64
+ ret i64 %len
+}
+
+define i64 @zext_icmp_eq_bool_1(ptr %ptr) {
+; CHECK-LABEL: @zext_icmp_eq_bool_1(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[VAL]], 1
+; CHECK-NEXT: [[LEN:%.*]] = zext i1 [[CMP]] to i64
+; CHECK-NEXT: ret i64 [[LEN]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp eq i64 %val, 1
+ %len = zext i1 %cmp to i64
+ ret i64 %len
+}
+
+define i64 @zext_icmp_ne_bool_0(ptr %ptr) {
+; CHECK-LABEL: @zext_icmp_ne_bool_0(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
+; CHECK-NEXT: ret i64 [[VAL]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp ne i64 %val, 0
+ %len = zext i1 %cmp to i64
+ ret i64 %len
+}
+
+define i64 @zext_icmp_ne_bool_1(ptr %ptr) {
+; CHECK-LABEL: @zext_icmp_ne_bool_1(
+; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
+; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[VAL]], 1
+; CHECK-NEXT: [[LEN:%.*]] = zext i1 [[CMP]] to i64
+; CHECK-NEXT: ret i64 [[LEN]]
+;
+ %val = load i64, ptr %ptr, align 8, !range !{i64 0, i64 2}
+ %cmp = icmp ne i64 %val, 1
+ %len = zext i1 %cmp to i64
+ ret i64 %len
+}