[llvm] [llvm][ValueTracking] ComputeNumSignBitsImpl - add basic handling of BITCAST nodes (PR #97967)

Nhat Nguyen via llvm-commits llvm-commits at lists.llvm.org
Sun Jul 7 11:50:58 PDT 2024


https://github.com/changkhothuychung created https://github.com/llvm/llvm-project/pull/97967

Create a PR to work on #87624

>From efa8ecadf468a88f79ccb536b636fb864ccfd3cb Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Sun, 7 Jul 2024 14:48:34 -0400
Subject: [PATCH] initial attempt

---
 llvm/lib/Analysis/ValueTracking.cpp | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

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;



More information about the llvm-commits mailing list