14#ifndef LLVM_ADT_DENSEMAPINFO_H
15#define LLVM_ADT_DENSEMAPINFO_H
32 x *= 0xbf58476d1ce4e5b9u;
72 if constexpr (std::is_unsigned_v<T> &&
sizeof(
T) >
sizeof(
unsigned))
75 return static_cast<unsigned>(Val *
76 static_cast<std::make_unsigned_t<T>
>(37U));
83template<
typename T,
typename U>
85 using Pair = std::pair<T, U>;
91 SecondInfo::getHashValue(PairVal.second));
99 SecondInfo::getHashValue(Second));
103 return FirstInfo::isEqual(
LHS.first,
RHS.first) &&
104 SecondInfo::isEqual(
LHS.second,
RHS.second);
113 if constexpr (
I ==
sizeof...(Ts)) {
116 using EltType = std::tuple_element_t<I, Tuple>;
127 template <std::size_t... Is>
129 std::index_sequence<Is...>) {
131 std::get<Is>(lhs), std::get<Is>(rhs)) &&
136 return isEqualImpl(lhs, rhs, std::index_sequence_for<Ts...>{});
141template <
typename Enum>
165 return Info::isEqual(
LHS.value(),
RHS.value());
static unsigned getHashValueImpl(SimpleValue Val)
static bool isEqualImpl(SimpleValue LHS, SimpleValue RHS)
unsigned combineHashValue(unsigned a, unsigned b)
Simplistic combination of 32-bit hash values into 32-bit hash values.
This is an optimization pass for GlobalISel generic memory operations.
@ First
Helpers to iterate all locations in the MemoryEffectsBase class.
Implement std::hash so that hash_code can be used in STL containers.
std::underlying_type_t< Enum > UnderlyingType
static bool isEqual(const Enum &LHS, const Enum &RHS)
DenseMapInfo< UnderlyingType > Info
static unsigned getHashValue(const Enum &Val)
static bool isEqual(const T &LHS, const T &RHS)
static unsigned getHashValue(const T &Val)
static unsigned getHashValue(const T *PtrVal)
static bool isEqual(const T *LHS, const T *RHS)
std::optional< T > Optional
static unsigned getHashValue(const Optional &OptionalVal)
static bool isEqual(const Optional &LHS, const Optional &RHS)
static unsigned getHashValuePiecewise(const T &First, const U &Second)
static unsigned getHashValue(const Pair &PairVal)
DenseMapInfo< T > FirstInfo
DenseMapInfo< U > SecondInfo
static bool isEqual(const Pair &LHS, const Pair &RHS)
std::tuple< Ts... > Tuple
static bool isEqualImpl(const Tuple &lhs, const Tuple &rhs, std::index_sequence< Is... >)
static unsigned getHashValue(const std::tuple< Ts... > &values)
static bool isEqual(const Tuple &lhs, const Tuple &rhs)
static unsigned getHashValueImpl(const Tuple &values)
An information struct used to provide DenseMap with the various necessary components for a given valu...