[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