[llvm] [llvm][ValueTracking] ComputeNumSignBitsImpl - add basic handling of BITCAST nodes (PR #97967)
via llvm-commits
llvm-commits at lists.llvm.org
Sun Jul 7 11:51:30 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-analysis
Author: Nhat Nguyen (changkhothuychung)
<details>
<summary>Changes</summary>
Create a PR to work on #<!-- -->87624
---
Full diff: https://github.com/llvm/llvm-project/pull/97967.diff
1 Files Affected:
- (modified) llvm/lib/Analysis/ValueTracking.cpp (+15)
``````````diff
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 0dbb39d7c8ec4..906dc2abff0f3 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3599,6 +3599,21 @@ static unsigned ComputeNumSignBitsImpl(const Value *V,
if (auto *U = dyn_cast<Operator>(V)) {
switch (Operator::getOpcode(V)) {
default: break;
+
+ case Intruction::BIT_CAST: {
+ Value *Src = U->getOperand(0);
+ unsigned NumSrcEltBits = Src->getType()->getScalarSizeInBits();
+ if ((NumSrcEltBits % TyBits) != 0)
+ break;
+
+ // fast handling
+ unsigned NumSrcSignBits = ComputeNumSignBits(Src, Depth + 1, Q);
+ if (NumSrcEltBits == NumSrcSignBits)
+ return TyBits;
+
+ break;
+ }
+
case Instruction::SExt:
Tmp = TyBits - U->getOperand(0)->getType()->getScalarSizeInBits();
return ComputeNumSignBits(U->getOperand(0), Depth + 1, Q) + Tmp;
``````````
</details>
https://github.com/llvm/llvm-project/pull/97967
More information about the llvm-commits
mailing list