diff options
author | cmtice <cmtice@google.com> | 2024-02-21 08:26:05 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-21 08:26:05 -0800 |
commit | 453b1a2fce3c46e866131797f876976032cff384 (patch) | |
tree | 30d8d00a43286d00417ab1c5c0381b98838f2681 /llvm | |
parent | 9978f6a10f37d12e1eecad0d4bfacd350d933ed7 (diff) | |
download | llvm-453b1a2fce3c46e866131797f876976032cff384.zip llvm-453b1a2fce3c46e866131797f876976032cff384.tar.gz llvm-453b1a2fce3c46e866131797f876976032cff384.tar.bz2 |
[LLVM][DWARF] Refactor code for generating DWARF V5 .debug_names (#82394)
[LLVM][DWARF] Refactor code for generating DWARF v5 .debug_names
Refactor the code that uniques the entries and computes the bucket count
for the DWARF V5 .debug_names accelerator table.
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/include/llvm/BinaryFormat/Dwarf.h | 19 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp | 14 |
2 files changed, 21 insertions, 12 deletions
diff --git a/llvm/include/llvm/BinaryFormat/Dwarf.h b/llvm/include/llvm/BinaryFormat/Dwarf.h index 869352b..44c0030 100644 --- a/llvm/include/llvm/BinaryFormat/Dwarf.h +++ b/llvm/include/llvm/BinaryFormat/Dwarf.h @@ -613,6 +613,25 @@ enum AcceleratorTable { DW_hash_function_djb = 0u }; +// Uniquify the string hashes and calculate the bucket count for the +// DWARF v5 Accelerator Table. NOTE: This function effectively consumes the +// 'hashes' input parameter. +inline uint32_t getDebugNamesBucketCount(MutableArrayRef<uint32_t> hashes, + uint32_t &uniqueHashCount) { + uint32_t BucketCount = 0; + + sort(hashes); + uniqueHashCount = llvm::unique(hashes) - hashes.begin(); + if (uniqueHashCount > 1024) + BucketCount = uniqueHashCount / 4; + else if (uniqueHashCount > 16) + BucketCount = uniqueHashCount / 2; + else + BucketCount = std::max<uint32_t>(uniqueHashCount, 1); + + return BucketCount; +} + // Constants for the GNU pubnames/pubtypes extensions supporting gdb index. enum GDBIndexEntryKind { GIEK_NONE, diff --git a/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp b/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp index 22d995a..23fc9b2e 100644 --- a/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/AccelTable.cpp @@ -33,22 +33,12 @@ using namespace llvm; void AccelTableBase::computeBucketCount() { // First get the number of unique hashes. - std::vector<uint32_t> Uniques; + SmallVector<uint32_t, 0> Uniques; Uniques.reserve(Entries.size()); for (const auto &E : Entries) Uniques.push_back(E.second.HashValue); - array_pod_sort(Uniques.begin(), Uniques.end()); - std::vector<uint32_t>::iterator P = - std::unique(Uniques.begin(), Uniques.end()); - UniqueHashCount = std::distance(Uniques.begin(), P); - - if (UniqueHashCount > 1024) - BucketCount = UniqueHashCount / 4; - else if (UniqueHashCount > 16) - BucketCount = UniqueHashCount / 2; - else - BucketCount = std::max<uint32_t>(UniqueHashCount, 1); + BucketCount = llvm::dwarf::getDebugNamesBucketCount(Uniques, UniqueHashCount); } void AccelTableBase::finalize(AsmPrinter *Asm, StringRef Prefix) { |