[llvm] 456e49e - [ADT] Use "constexpr if" in get_hashable_data (NFC) (#157309)

via llvm-commits llvm-commits at lists.llvm.org
Sun Sep 7 10:39:26 PDT 2025


Author: Kazu Hirata
Date: 2025-09-07T10:39:23-07:00
New Revision: 456e49e80559622a42fe3083333a9b145f022a9f

URL: https://github.com/llvm/llvm-project/commit/456e49e80559622a42fe3083333a9b145f022a9f
DIFF: https://github.com/llvm/llvm-project/commit/456e49e80559622a42fe3083333a9b145f022a9f.diff

LOG: [ADT] Use "constexpr if" in get_hashable_data (NFC) (#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.

Added: 
    

Modified: 
    llvm/include/llvm/ADT/Hashing.h

Removed: 
    


################################################################################
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