From 7c683bf80c50b95b39f490602939cf68f7573e5c Mon Sep 17 00:00:00 2001 From: Kazu Hirata Date: Wed, 3 Sep 2025 00:34:13 -0700 Subject: [PATCH] [ADT] Simplify DenseMapInfo> with constexpr if (NFC) This patch consolidates two implementations of getHashValueImpl into one with "constexpr if", which should be more readable than the SFINAE-based approach. The same applies to isEqualImpl. --- llvm/include/llvm/ADT/DenseMapInfo.h | 46 ++++++++++++---------------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/llvm/include/llvm/ADT/DenseMapInfo.h b/llvm/include/llvm/ADT/DenseMapInfo.h index ec7a116856bb4..717156c4bd196 100644 --- a/llvm/include/llvm/ADT/DenseMapInfo.h +++ b/llvm/include/llvm/ADT/DenseMapInfo.h @@ -179,41 +179,35 @@ template struct DenseMapInfo> { return Tuple(DenseMapInfo::getTombstoneKey()...); } - template - static unsigned getHashValueImpl(const Tuple &values, std::false_type) { - using EltType = std::tuple_element_t; - std::integral_constant atEnd; - return detail::combineHashValue( - DenseMapInfo::getHashValue(std::get(values)), - getHashValueImpl(values, atEnd)); - } - - template - static unsigned getHashValueImpl(const Tuple &, std::true_type) { - return 0; + template static unsigned getHashValueImpl(const Tuple &values) { + if constexpr (I == sizeof...(Ts)) + return 0; + else { + using EltType = std::tuple_element_t; + return detail::combineHashValue( + DenseMapInfo::getHashValue(std::get(values)), + getHashValueImpl(values)); + } } static unsigned getHashValue(const std::tuple &values) { - std::integral_constant atEnd; - return getHashValueImpl<0>(values, atEnd); + return getHashValueImpl<0>(values); } template - static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs, std::false_type) { - using EltType = std::tuple_element_t; - std::integral_constant atEnd; - return DenseMapInfo::isEqual(std::get(lhs), std::get(rhs)) && - isEqualImpl(lhs, rhs, atEnd); - } - - template - static bool isEqualImpl(const Tuple &, const Tuple &, std::true_type) { - return true; + static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs) { + if constexpr (I == sizeof...(Ts)) + return true; + else { + using EltType = std::tuple_element_t; + return DenseMapInfo::isEqual(std::get(lhs), + std::get(rhs)) && + isEqualImpl(lhs, rhs); + } } static bool isEqual(const Tuple &lhs, const Tuple &rhs) { - std::integral_constant atEnd; - return isEqualImpl<0>(lhs, rhs, atEnd); + return isEqualImpl<0>(lhs, rhs); } };