[llvm] [ValueTracking] Use unionWith when calculating known bits for abs. (PR #155896)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 28 11:01:37 PDT 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
We may have already gotten information from range metadata, don't
overwrite it.
---
Full diff: https://github.com/llvm/llvm-project/pull/155896.diff
2 Files Affected:
- (modified) llvm/lib/Analysis/ValueTracking.cpp (+1-1)
- (modified) llvm/test/Transforms/InstCombine/abs-intrinsic.ll (+13)
``````````diff
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 7fe129b8456f6..864b972e06a10 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -1829,7 +1829,7 @@ static void computeKnownBitsFromOperator(const Operator *I,
case Intrinsic::abs: {
computeKnownBits(I->getOperand(0), DemandedElts, Known2, Q, Depth + 1);
bool IntMinIsPoison = match(II->getArgOperand(1), m_One());
- Known = Known2.abs(IntMinIsPoison);
+ Known = Known.unionWith(Known2.abs(IntMinIsPoison));
break;
}
case Intrinsic::bitreverse:
diff --git a/llvm/test/Transforms/InstCombine/abs-intrinsic.ll b/llvm/test/Transforms/InstCombine/abs-intrinsic.ll
index d32f0e4690502..346111d892975 100644
--- a/llvm/test/Transforms/InstCombine/abs-intrinsic.ll
+++ b/llvm/test/Transforms/InstCombine/abs-intrinsic.ll
@@ -847,3 +847,16 @@ cond.end:
%r = phi i32 [ %0, %cond.true ], [ 0, %entry ]
ret i32 %r
}
+
+; The AND should be removable based on range metadata. Make sure
+; computeKnownBits doesn't lose this.
+define i32 @abs_range_metadata(i32 %x) {
+; CHECK-LABEL: @abs_range_metadata(
+; CHECK-NEXT: [[B:%.*]] = call i32 @llvm.abs.i32(i32 [[X:%.*]], i1 false), !range [[RNG0:![0-9]+]]
+; CHECK-NEXT: ret i32 [[B]]
+;
+ %a = call i32 @llvm.abs.i32(i32 %x, i1 false), !range !1
+ %b = and i32 %a, 15
+ ret i32 %b
+}
+!1 = !{i32 0, i32 16}
``````````
</details>
https://github.com/llvm/llvm-project/pull/155896
More information about the llvm-commits
mailing list