[llvm] f5bbdf2 - [ValueTracking] Add more tests for isKnownNonEqual() of mul (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Sun Mar 21 10:41:43 PDT 2021


Author: Nikita Popov
Date: 2021-03-21T18:41:35+01:00
New Revision: f5bbdf2a674a94c568aaa7dca4c282901256683b

URL: https://github.com/llvm/llvm-project/commit/f5bbdf2a674a94c568aaa7dca4c282901256683b
DIFF: https://github.com/llvm/llvm-project/commit/f5bbdf2a674a94c568aaa7dca4c282901256683b.diff

LOG: [ValueTracking] Add more tests for isKnownNonEqual() of mul (NFC)

This is for the case of (x * C) == x, rather than the
(x * C1) == (x * C2) variant that we already cover.

Added: 
    

Modified: 
    llvm/test/Analysis/ValueTracking/known-non-equal.ll

Removed: 
    


################################################################################
diff  --git a/llvm/test/Analysis/ValueTracking/known-non-equal.ll b/llvm/test/Analysis/ValueTracking/known-non-equal.ll
index 197088a85e81..bd50f602eb74 100644
--- a/llvm/test/Analysis/ValueTracking/known-non-equal.ll
+++ b/llvm/test/Analysis/ValueTracking/known-non-equal.ll
@@ -214,4 +214,93 @@ define i1 @mul_constantexpr(i16 %a) {
   ret i1 %cmp
 }
 
+define i1 @mul_nuw(i16 %x) {
+; CHECK-LABEL: @mul_nuw(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i16 [[NZ]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[NZ]], [[MUL]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul nuw i16 %nz, 2
+  %cmp = icmp eq i16 %nz, %mul
+  ret i1 %cmp
+}
+
+define i1 @mul_nuw_comm(i16 %x) {
+; CHECK-LABEL: @mul_nuw_comm(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i16 [[NZ]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[MUL]], [[NZ]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul nuw i16 %nz, 2
+  %cmp = icmp eq i16 %mul, %nz
+  ret i1 %cmp
+}
+
+define i1 @mul_nsw(i16 %x) {
+; CHECK-LABEL: @mul_nsw(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i16 [[NZ]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[NZ]], [[MUL]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul nsw i16 %nz, 2
+  %cmp = icmp eq i16 %nz, %mul
+  ret i1 %cmp
+}
+
+define i1 @mul_nsw_comm(i16 %x) {
+; CHECK-LABEL: @mul_nsw_comm(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i16 [[NZ]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[MUL]], [[NZ]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul nsw i16 %nz, 2
+  %cmp = icmp eq i16 %mul, %nz
+  ret i1 %cmp
+}
+
+define i1 @mul_may_wrap(i16 %x) {
+; CHECK-LABEL: @mul_may_wrap(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul i16 [[NZ]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[NZ]], [[MUL]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul i16 %nz, 2
+  %cmp = icmp eq i16 %nz, %mul
+  ret i1 %cmp
+}
+
+define i1 @mul_may_be_zero(i16 %x) {
+; CHECK-LABEL: @mul_may_be_zero(
+; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[X]], [[MUL]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %mul = mul nuw i16 %x, 2
+  %cmp = icmp eq i16 %x, %mul
+  ret i1 %cmp
+}
+
+define i1 @mul_other_may_be_zero_or_one(i16 %x, i16 %y) {
+; CHECK-LABEL: @mul_other_may_be_zero_or_one(
+; CHECK-NEXT:    [[NZ:%.*]] = or i16 [[X:%.*]], 2
+; CHECK-NEXT:    [[MUL:%.*]] = mul nuw i16 [[NZ]], [[Y:%.*]]
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq i16 [[NZ]], [[MUL]]
+; CHECK-NEXT:    ret i1 [[CMP]]
+;
+  %nz = or i16 %x, 2
+  %mul = mul nuw i16 %nz, %y
+  %cmp = icmp eq i16 %nz, %mul
+  ret i1 %cmp
+}
+
 !0 = !{ i8 1, i8 5 }


        


More information about the llvm-commits mailing list