[InstCombine] Add additional test for icmp eq/ne with bool load (NFC)
authorNikita Popov <npopov@redhat.com>
Wed, 15 Mar 2023 16:03:27 +0000 (17:03 +0100)
committerNikita Popov <npopov@redhat.com>
Wed, 15 Mar 2023 16:03:27 +0000 (17:03 +0100)
llvm/test/Transforms/InstCombine/icmp-range.ll
llvm/test/Transforms/InstCombine/zext.ll

index 7b7440beaed0adaa5899a2e80b071adfc4431921..29b601f5522be3e13db05ed4d5086e44fae66d71 100644 (file)
@@ -990,6 +990,50 @@ define i1 @zext_sext_add_icmp_slt_1_type_not_i1(i2 %a, i1 %b) {
   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}
index d223c94e553e1ba632546252a00779a5c7e1e88e..dd781c78d3fb14a13b49da6a6afcbd1cbee8f967 100644 (file)
@@ -702,3 +702,52 @@ define i8 @zext_icmp_eq_pow2(i8 %y, i8 %x) {
   %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
+}