@@ -702,3 +702,52 @@ define i8 @zext_icmp_eq_pow2(i8 %y, i8 %x) {
702
702
%r = zext i1 %c to i8
703
703
ret i8 %r
704
704
}
705
+
706
+ define i64 @zext_icmp_eq_bool_0 (ptr %ptr ) {
707
+ ; CHECK-LABEL: @zext_icmp_eq_bool_0(
708
+ ; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0:![0-9]+]]
709
+ ; CHECK-NEXT: [[LEN:%.*]] = xor i64 [[VAL]], 1
710
+ ; CHECK-NEXT: ret i64 [[LEN]]
711
+ ;
712
+ %val = load i64 , ptr %ptr , align 8 , !range !{i64 0 , i64 2 }
713
+ %cmp = icmp eq i64 %val , 0
714
+ %len = zext i1 %cmp to i64
715
+ ret i64 %len
716
+ }
717
+
718
+ define i64 @zext_icmp_eq_bool_1 (ptr %ptr ) {
719
+ ; CHECK-LABEL: @zext_icmp_eq_bool_1(
720
+ ; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
721
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp eq i64 [[VAL]], 1
722
+ ; CHECK-NEXT: [[LEN:%.*]] = zext i1 [[CMP]] to i64
723
+ ; CHECK-NEXT: ret i64 [[LEN]]
724
+ ;
725
+ %val = load i64 , ptr %ptr , align 8 , !range !{i64 0 , i64 2 }
726
+ %cmp = icmp eq i64 %val , 1
727
+ %len = zext i1 %cmp to i64
728
+ ret i64 %len
729
+ }
730
+
731
+ define i64 @zext_icmp_ne_bool_0 (ptr %ptr ) {
732
+ ; CHECK-LABEL: @zext_icmp_ne_bool_0(
733
+ ; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
734
+ ; CHECK-NEXT: ret i64 [[VAL]]
735
+ ;
736
+ %val = load i64 , ptr %ptr , align 8 , !range !{i64 0 , i64 2 }
737
+ %cmp = icmp ne i64 %val , 0
738
+ %len = zext i1 %cmp to i64
739
+ ret i64 %len
740
+ }
741
+
742
+ define i64 @zext_icmp_ne_bool_1 (ptr %ptr ) {
743
+ ; CHECK-LABEL: @zext_icmp_ne_bool_1(
744
+ ; CHECK-NEXT: [[VAL:%.*]] = load i64, ptr [[PTR:%.*]], align 8, !range [[RNG0]]
745
+ ; CHECK-NEXT: [[CMP:%.*]] = icmp ne i64 [[VAL]], 1
746
+ ; CHECK-NEXT: [[LEN:%.*]] = zext i1 [[CMP]] to i64
747
+ ; CHECK-NEXT: ret i64 [[LEN]]
748
+ ;
749
+ %val = load i64 , ptr %ptr , align 8 , !range !{i64 0 , i64 2 }
750
+ %cmp = icmp ne i64 %val , 1
751
+ %len = zext i1 %cmp to i64
752
+ ret i64 %len
753
+ }
0 commit comments