[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