[llvm] [Support] Make readNext default to unaligned (PR #88808)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 15 15:33:27 PDT 2024
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/88808
Without this patch, you would typically use readNext as:
readNext<uint32_t, llvm::endianness::little, unaligned>(Ptr)
which is quite mouthful. Since most serialization/deserialization
operations are unaligned accesses, this patch makes the alignment
template parameter default to unaligned, allowing us to say:
readNext<uint32_t, llvm::endianness::little>(Ptr)
I'm including a few examples of migration in this patch. I'll do the
rest in a separate patch.
Note that writeNext already has the same trick for the alignment
template parameter.
>From f4d5320e51d99324bda6b66b966ca39674c202bf Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Mon, 15 Apr 2024 09:41:29 -0700
Subject: [PATCH] [Support] Make readNext default to unaligned
Without this patch, you would typically use readNext as:
readNext<uint32_t, llvm::endianness::little, unaligned>(Ptr)
which is quite mouthful. Since most serialization/deserialization
operations are unaligned accesses, this patch makes the alignment
template parameter default to unaligned, allowing us to say:
readNext<uint32_t, llvm::endianness::little>(Ptr)
I'm including a few examples of migration in this patch. I'll do the
rest in a separate patch.
Note that writeNext already has the same trick for the alignment
template parameter.
---
llvm/include/llvm/Support/Endian.h | 4 ++--
llvm/include/llvm/Support/OnDiskHashTable.h | 9 +++------
2 files changed, 5 insertions(+), 8 deletions(-)
diff --git a/llvm/include/llvm/Support/Endian.h b/llvm/include/llvm/Support/Endian.h
index 1cdb5ca0d5eaa1..30e0852b972c5a 100644
--- a/llvm/include/llvm/Support/Endian.h
+++ b/llvm/include/llvm/Support/Endian.h
@@ -80,8 +80,8 @@ template <typename value_type, std::size_t alignment, typename CharT>
return ret;
}
-template <typename value_type, endianness endian, std::size_t alignment,
- typename CharT>
+template <typename value_type, endianness endian,
+ std::size_t alignment = unaligned, typename CharT>
[[nodiscard]] inline value_type readNext(const CharT *&memory) {
return readNext<value_type, alignment, CharT>(memory, endian);
}
diff --git a/llvm/include/llvm/Support/OnDiskHashTable.h b/llvm/include/llvm/Support/OnDiskHashTable.h
index 0a8cbbd8b18832..f6b4055e74de7e 100644
--- a/llvm/include/llvm/Support/OnDiskHashTable.h
+++ b/llvm/include/llvm/Support/OnDiskHashTable.h
@@ -368,14 +368,12 @@ template <typename Info> class OnDiskChainedHashTable {
// 'Items' starts with a 16-bit unsigned integer representing the
// number of items in this bucket.
- unsigned Len =
- endian::readNext<uint16_t, llvm::endianness::little, unaligned>(Items);
+ unsigned Len = endian::readNext<uint16_t, llvm::endianness::little>(Items);
for (unsigned i = 0; i < Len; ++i) {
// Read the hash.
hash_value_type ItemHash =
- endian::readNext<hash_value_type, llvm::endianness::little,
- unaligned>(Items);
+ endian::readNext<hash_value_type, llvm::endianness::little>(Items);
// Determine the length of the key and the data.
const std::pair<offset_type, offset_type> &L =
@@ -473,8 +471,7 @@ class OnDiskIterableChainedHashTable : public OnDiskChainedHashTable<Info> {
// 'Items' starts with a 16-bit unsigned integer representing the
// number of items in this bucket.
NumItemsInBucketLeft =
- endian::readNext<uint16_t, llvm::endianness::little, unaligned>(
- Ptr);
+ endian::readNext<uint16_t, llvm::endianness::little>(Ptr);
}
Ptr += sizeof(hash_value_type); // Skip the hash.
// Determine the length of the key and the data.
More information about the llvm-commits
mailing list