[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