[llvm] [ADT] Use "constexpr if" in get_hashable_data (NFC) (PR #157309)
Kazu Hirata via llvm-commits
llvm-commits at lists.llvm.org
Sat Sep 6 13:45:28 PDT 2025
https://github.com/kazutakahirata created https://github.com/llvm/llvm-project/pull/157309
This patch combines two implementations of get_hashable_data into one
with "constexpr if". I'm retaining the original return type of the
second variant, size_t, with static_cast<size_t>. Moving away from
template metaprogramming should improve readability.
>From a14682316e1789f7c844c1898e905cc5d16c4a94 Mon Sep 17 00:00:00 2001
From: Kazu Hirata <kazu at google.com>
Date: Wed, 3 Sep 2025 10:08:22 -0700
Subject: [PATCH] [ADT] Use "constexpr if" in get_hashable_data (NFC)
This patch combines two implementations of get_hashable_data into one
with "constexpr if". I'm retaining the original return type of the
second variant, size_t, with static_cast<size_t>. Moving away from
template metaprogramming should improve readability.
---
llvm/include/llvm/ADT/Hashing.h | 24 ++++++++++--------------
1 file changed, 10 insertions(+), 14 deletions(-)
diff --git a/llvm/include/llvm/ADT/Hashing.h b/llvm/include/llvm/ADT/Hashing.h
index ad131015a7d99..ec22fe3a28cf9 100644
--- a/llvm/include/llvm/ADT/Hashing.h
+++ b/llvm/include/llvm/ADT/Hashing.h
@@ -349,20 +349,16 @@ template <typename T, typename U> struct is_hashable_data<std::pair<T, U> >
sizeof(std::pair<T, U>))> {};
/// Helper to get the hashable data representation for a type.
-/// This variant is enabled when the type itself can be used.
-template <typename T>
-std::enable_if_t<is_hashable_data<T>::value, T>
-get_hashable_data(const T &value) {
- return value;
-}
-/// Helper to get the hashable data representation for a type.
-/// This variant is enabled when we must first call hash_value and use the
-/// result as our data.
-template <typename T>
-std::enable_if_t<!is_hashable_data<T>::value, size_t>
-get_hashable_data(const T &value) {
- using ::llvm::hash_value;
- return hash_value(value);
+template <typename T> auto get_hashable_data(const T &value) {
+ if constexpr (is_hashable_data<T>::value) {
+ // This variant is enabled when the type itself can be used.
+ return value;
+ } else {
+ // This variant is enabled when we must first call hash_value and use the
+ // result as our data.
+ using ::llvm::hash_value;
+ return static_cast<size_t>(hash_value(value));
+ }
}
/// Helper to store data from a value into a buffer and advance the
More information about the llvm-commits
mailing list