[llvm] [llvm][utils] Add summary formatter for SmallBitVector (PR #150542)
Dave Lee via llvm-commits
llvm-commits at lists.llvm.org
Thu Jul 24 15:45:57 PDT 2025
https://github.com/kastiglione created https://github.com/llvm/llvm-project/pull/150542
None
>From 6a1bcd916023af62c1d6f2c329566a3dddd96590 Mon Sep 17 00:00:00 2001
From: Dave Lee <davelee.com at gmail.com>
Date: Thu, 24 Jul 2025 15:43:44 -0700
Subject: [PATCH] [llvm][utils] Add summary formatter for SmallBitVector
---
llvm/utils/lldbDataFormatters.py | 30 ++++++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/llvm/utils/lldbDataFormatters.py b/llvm/utils/lldbDataFormatters.py
index c5cd627c53149..7fbeabe64ab9e 100644
--- a/llvm/utils/lldbDataFormatters.py
+++ b/llvm/utils/lldbDataFormatters.py
@@ -94,6 +94,11 @@ def __lldb_init_module(debugger, internal_dict):
f"-l {__name__}.ExpectedSynthetic "
'-x "^llvm::Expected<.+>$"'
)
+ debugger.HandleCommand(
+ "type summary add -w llvm "
+ f"-F {__name__}.SmallBitVectorSummary "
+ "llvm::SmallBitVector"
+ )
# Pretty printer for llvm::SmallVector/llvm::SmallVectorImpl
@@ -448,3 +453,28 @@ def get_child_at_index(self, idx: int) -> lldb.SBValue:
if idx == 0:
return self.stored_value
return lldb.SBValue()
+
+
+def SmallBitVectorSummary(valobj, _):
+ underlyingValue = valobj.GetChildMemberWithName("X").unsigned
+ numBaseBits = valobj.target.addr_size * 8
+ smallNumRawBits = numBaseBits - 1
+ smallNumSizeBits = None
+ if numBaseBits == 32:
+ smallNumSizeBits = 5
+ elif numBaseBits == 64:
+ smallNumSizeBits = 6
+ else:
+ smallNumSizeBits = smallNumRawBits
+ smallNumDataBits = smallNumRawBits - smallNumSizeBits
+
+ # If our underlying value is not small, print we can not dump large values.
+ isSmallMask = 1
+ if underlyingValue & isSmallMask == 0:
+ return "<can not read large SmallBitVector>"
+
+ smallRawBits = underlyingValue >> 1
+ smallSize = smallRawBits >> smallNumDataBits
+ bits = smallRawBits & ((1 << (smallSize + 1)) - 1)
+ # format `bits` in binary (b), with 0 padding, of width `smallSize`, and left aligned (>)
+ return f"[{bits:0>{smallSize}b}]"
More information about the llvm-commits
mailing list