[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 14:47:36 PDT 2024
https://github.com/changkhothuychung updated https://github.com/llvm/llvm-project/pull/97967
>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 1/2] 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;
>From b83ce2b4fc33045fb2c4b3d3a4b7dafe58845e04 Mon Sep 17 00:00:00 2001
From: changkhothuychung <nhat7203 at gmail.com>
Date: Sun, 7 Jul 2024 17:47:20 -0400
Subject: [PATCH 2/2] typo fix
---
llvm/lib/Analysis/ValueTracking.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/llvm/lib/Analysis/ValueTracking.cpp b/llvm/lib/Analysis/ValueTracking.cpp
index 906dc2abff0f3..2b766c41c4d66 100644
--- a/llvm/lib/Analysis/ValueTracking.cpp
+++ b/llvm/lib/Analysis/ValueTracking.cpp
@@ -3600,7 +3600,7 @@ static unsigned ComputeNumSignBitsImpl(const Value *V,
switch (Operator::getOpcode(V)) {
default: break;
- case Intruction::BIT_CAST: {
+ case Instruction::BIT_CAST: {
Value *Src = U->getOperand(0);
unsigned NumSrcEltBits = Src->getType()->getScalarSizeInBits();
if ((NumSrcEltBits % TyBits) != 0)
More information about the llvm-commits
mailing list