[llvm] [lldb] Fix size in bytes of type DIEs when size in bits is not a multiple of 8 (PR #69741)

Michael Buch via llvm-commits llvm-commits at lists.llvm.org
Thu Nov 9 22:33:29 PST 2023


================
@@ -298,6 +298,12 @@ ParsedDWARFTypeAttributes::ParsedDWARFTypeAttributes(const DWARFDIE &die) {
       byte_size = form_value.Unsigned();
       break;
 
+    case DW_AT_bit_size:
+      // Convert the bit size to byte size, and round it up to the minimum about
+      // of bytes that will fit the bits.
+      byte_size = (form_value.Unsigned() + 7) / 8;
----------------
Michael137 wrote:

Completely out of scope of the PR but wonder if we should introduce something in `llvm/Support/MathExtras.h` that does this for us.

```                                                                                                                                                            
clang-tools-extra/test/clang-tidy/checkers/bugprone/branch-clone.cpp:969:    int n = (count + 7) / 8;                                                                                                                 
clang/test/SemaCXX/constexpr-duffs-device.cpp:6:        unsigned long n = (count + 7) / 8;                                                                                                                            
clang/lib/CodeGen/Targets/X86.cpp:2988:  uint64_t SizeInBytes = (CGF.getContext().getTypeSize(Ty) + 7) / 8;                                                                                                           
flang/runtime/edit-input.cpp:84:  auto significantBytes{static_cast<std::size_t>(digits * LOG2_BASE + 7) / 8};                                                                                                        
lldb/source/Core/ValueObjectChild.cpp:172:                    (bitfield_end - *type_bit_size + 7) / 8;                                                                                                                
lldb/source/Core/DumpDataExtractor.cpp:674:          (llvm::APFloat::getSizeInBits(semantics) + 7) / 8;                                                                                                               
lldb/source/Plugins/ExpressionParser/Clang/IRForTarget.cpp:1044:    lldb::offset_t value_alignment = (*opt_alignment + 7ull) / 8ull;                                  
lldb/source/Plugins/TypeSystem/Clang/TypeSystemClang.h:816:      return (*bit_size + 7) / 8;                                                                                                                          
lldb/source/Symbol/CompilerType.cpp:561:    return (*bit_size + 7) / 8;                                                                                                                                               
lldb/source/Expression/Materializer.cpp:554:        size_t byte_align = (*opt_bit_align + 7) / 8;                                                                                                                     
lldb/source/Expression/Materializer.cpp:952:      size_t byte_align = (*opt_bit_align + 7) / 8;                                                                                                                       
lldb/source/Utility/Scalar.cpp:118:    StoreIntToMemory(val, storage.data(), (val.getBitWidth() + 7) / 8);                                                                                                            
llvm/include/llvm/CodeGen/MachineValueType.h:354:      return {(BaseSize.getKnownMinValue() + 7) / 8, BaseSize.isScalable()};                                 
llvm/include/llvm/CodeGen/TargetLowering.h:3466:  uint32_t CondCodeActions[ISD::SETCC_INVALID][(MVT::VALUETYPE_SIZE + 7) / 8];                                                                                     
llvm/include/llvm/CodeGen/ValueTypes.h:375:      return {(BaseSize.getKnownMinValue() + 7) / 8, BaseSize.isScalable()};                                                                                               
llvm/include/llvm/CodeGen/LowLevelType.h:187:    return {(BaseSize.getKnownMinValue() + 7) / 8, BaseSize.isScalable()};                                                                                               
llvm/utils/TableGen/AsmWriterEmitter.cpp:407:  unsigned BytesNeeded = ((OpcodeInfoBits - BitsLeft) + 7) / 8;                                                                                                          
llvm/lib/Analysis/ConstantFolding.cpp:598:  unsigned BytesLoaded = (IntType->getBitWidth() + 7) / 8;                                                                                                                  
llvm/lib/Target/M68k/M68kISelLowering.cpp:736:      uint32_t OpSize = (VA.getLocVT().getSizeInBits() + 7) / 8;                                                                        
llvm/lib/Target/NVPTX/NVPTXAsmPrinter.cpp:1834:    size_t NumBytes = (Val.getBitWidth() + 7) / 8;                                                                                                                     
llvm/lib/Target/Lanai/MCTargetDesc/LanaiAsmBackend.cpp:101:  unsigned NumBytes = (getFixupKindInfo(Kind).TargetSize + 7) / 8;                                                                                         
llvm/lib/Target/PowerPC/PPCISelLowering.cpp:5129:  uint32_t OpSize = (Arg.getValueSizeInBits() + 7) / 8;                                                                                                              
llvm/lib/Target/Mips/MCTargetDesc/MipsAsmBackend.cpp:258:  unsigned NumBytes = (getFixupKindInfo(Kind).TargetSize + 7) / 8;                                                                                           
llvm/lib/Target/AMDGPU/AMDGPURegisterBankInfo.cpp:1360:  const unsigned MemSize = (Ty.getSizeInBits() + 7) / 8;                                                                                                       
llvm/lib/Target/AMDGPU/AMDGPULegalizerInfo.cpp:6441:  const unsigned MemSize = (Size + 7) / 8;                                                                                                                        
llvm/lib/Target/SystemZ/MCTargetDesc/SystemZMCAsmBackend.cpp:183:  unsigned Size = (BitSize + 7) / 8;                                                                                                                 
llvm/lib/Target/AArch64/AArch64FastISel.cpp:3087:      unsigned ArgSize = (ArgVT.getSizeInBits() + 7) / 8;                                                                                                            
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:6537:      unsigned NumRegs = (Size + 7) / 8;                                                                                                                         
llvm/lib/Target/AArch64/AArch64ISelLowering.cpp:7700:      OpSize = (OpSize + 7) / 8;                                                                                                                                 
llvm/lib/CodeGen/GlobalISel/LegalizerHelper.cpp:7451:  unsigned SizeInBytes = (Ty.getScalarSizeInBits() + 7) / 8;                                                                       
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:19493:        PtrOff = (BitWidth + 7 - NewBW) / 8 - PtrOff;
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:28001:  Intervals.insert(0, (St->getMemoryVT().getSizeInBits() + 7) / 8,
llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp:28021:    int64_t Length = (Chain->getMemoryVT().getSizeInBits() + 7) / 8;
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:284:    OffsetByte = -((AllocBefore + 7) / 8 + (BitWidth + 7) / 8);
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:291:      Target.setBeforeBytes(AllocBefore, (BitWidth + 7) / 8);
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:301:    OffsetByte = (AllocAfter + 7) / 8;
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:308:      Target.setAfterBytes(AllocAfter, (BitWidth + 7) / 8);
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:1859:          (AllocBefore + 7) / 8 - Target.allocatedBeforeBytes() - 1, 0);
llvm/lib/Transforms/IPO/WholeProgramDevirt.cpp:1861:          (AllocAfter + 7) / 8 - Target.allocatedAfterBytes() - 1, 0);
llvm/lib/Transforms/Utils/VNCoercion.cpp:308:      (DL.getTypeSizeInBits(SrcVal->getType()).getFixedValue() + 7) / 8;
llvm/lib/Transforms/Utils/VNCoercion.cpp:309:  uint64_t LoadSize = (DL.getTypeSizeInBits(LoadTy).getFixedValue() + 7) / 8;
llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp:1112:  return Log2_32_Ceil((TypeSizeFixed + 7) / 8);
mlir/lib/IR/Operation.cpp:160:      propertiesStorageSize((fullPropertiesStorageSize + 7) / 8), name(name) {
```

https://github.com/llvm/llvm-project/pull/69741


More information about the llvm-commits mailing list