LLVM
12.0.0git
|
Classes | |
struct | hash_combine_recursive_helper |
Helper class to manage the recursive combining of hash_combine arguments. More... | |
struct | hash_state |
The intermediate state used during hashing. More... | |
struct | is_hashable_data |
Trait to indicate whether a type's bits can be hashed directly. More... | |
struct | is_hashable_data< std::pair< T, U > > |
Functions | |
uint64_t | fetch64 (const char *p) |
uint32_t | fetch32 (const char *p) |
uint64_t | rotate (uint64_t val, size_t shift) |
Bitwise right rotate. More... | |
uint64_t | shift_mix (uint64_t val) |
uint64_t | hash_16_bytes (uint64_t low, uint64_t high) |
uint64_t | hash_1to3_bytes (const char *s, size_t len, uint64_t seed) |
uint64_t | hash_4to8_bytes (const char *s, size_t len, uint64_t seed) |
uint64_t | hash_9to16_bytes (const char *s, size_t len, uint64_t seed) |
uint64_t | hash_17to32_bytes (const char *s, size_t len, uint64_t seed) |
uint64_t | hash_33to64_bytes (const char *s, size_t len, uint64_t seed) |
uint64_t | hash_short (const char *s, size_t length, uint64_t seed) |
uint64_t | get_execution_seed () |
template<typename T > | |
std::enable_if_t< is_hashable_data< T >::value, T > | get_hashable_data (const T &value) |
Helper to get the hashable data representation for a type. More... | |
template<typename T > | |
std::enable_if_t<!is_hashable_data< T >::value, size_t > | get_hashable_data (const T &value) |
Helper to get the hashable data representation for a type. More... | |
template<typename T > | |
bool | store_and_advance (char *&buffer_ptr, char *buffer_end, const T &value, size_t offset=0) |
Helper to store data from a value into a buffer and advance the pointer into that buffer. More... | |
template<typename InputIteratorT > | |
hash_code | hash_combine_range_impl (InputIteratorT first, InputIteratorT last) |
Implement the combining of integral values into a hash_code. More... | |
template<typename ValueT > | |
std::enable_if_t< is_hashable_data< ValueT >::value, hash_code > | hash_combine_range_impl (ValueT *first, ValueT *last) |
Implement the combining of integral values into a hash_code. More... | |
hash_code | hash_integer_value (uint64_t value) |
Helper to hash the value of a single integer. More... | |
template<typename... Ts, std::size_t... Indices> | |
hash_code | hash_value_tuple_helper (const std::tuple< Ts... > &arg, std::index_sequence< Indices... > indices) |
void | stable_hash_append (stable_hash &Hash, const char Value) |
void | stable_hash_append (stable_hash &Hash, stable_hash Value) |
Variables | |
static constexpr uint64_t | k0 = 0xc3a5c85c97cb3127ULL |
Some primes between 2^63 and 2^64 for various uses. More... | |
static constexpr uint64_t | k1 = 0xb492b66fbe98f273ULL |
static constexpr uint64_t | k2 = 0x9ae16a3b2f90404fULL |
static constexpr uint64_t | k3 = 0xc949d7c7509e6557ULL |
uint64_t | fixed_seed_override = 0 |
A global, fixed seed-override variable. More... | |
const uint64_t | FNV_PRIME_64 = 1099511628211u |
const uint64_t | FNV_OFFSET_64 = 14695981039346656037u |
Definition at line 156 of file Hashing.h.
References llvm::sys::IsBigEndianHost, and llvm::sys::swapByteOrder().
Referenced by hash_4to8_bytes(), and hash_integer_value().
Definition at line 148 of file Hashing.h.
References llvm::sys::IsBigEndianHost, and llvm::sys::swapByteOrder().
Referenced by hash_17to32_bytes(), hash_33to64_bytes(), hash_9to16_bytes(), llvm::hashing::detail::hash_state::mix(), and llvm::hashing::detail::hash_state::mix_32_bytes().
|
inline |
Definition at line 324 of file Hashing.h.
References fixed_seed_override.
Referenced by hash_combine_range_impl(), and hash_integer_value().
std::enable_if_t<is_hashable_data<T>::value, T> llvm::hashing::detail::get_hashable_data | ( | const T & | value | ) |
Helper to get the hashable data representation for a type.
This variant is enabled when the type itself can be used.
Definition at line 368 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_combine_recursive_helper::combine(), and hash_combine_range_impl().
std::enable_if_t<!is_hashable_data<T>::value, size_t> llvm::hashing::detail::get_hashable_data | ( | const T & | 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.
Definition at line 376 of file Hashing.h.
References hash_value(), and llvm::hash_value().
|
inline |
Definition at line 182 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_state::create(), llvm::hashing::detail::hash_state::finalize(), hash_17to32_bytes(), hash_4to8_bytes(), hash_9to16_bytes(), and hash_integer_value().
|
inline |
Definition at line 213 of file Hashing.h.
References fetch64(), hash_16_bytes(), k0, k1, k2, k3, and rotate().
Referenced by hash_short().
|
inline |
Definition at line 193 of file Hashing.h.
References k2, k3, and shift_mix().
Referenced by hash_short().
|
inline |
Definition at line 222 of file Hashing.h.
References fetch64(), k0, k2, rotate(), and shift_mix().
Referenced by hash_short().
|
inline |
Definition at line 202 of file Hashing.h.
References fetch32(), and hash_16_bytes().
Referenced by hash_short().
|
inline |
Definition at line 207 of file Hashing.h.
References fetch64(), hash_16_bytes(), and rotate().
Referenced by hash_short().
hash_code llvm::hashing::detail::hash_combine_range_impl | ( | InputIteratorT | first, |
InputIteratorT | last | ||
) |
Implement the combining of integral values into a hash_code.
This overload is selected when the value type of the iterator is integral. Rather than computing a hash_code for each object and then combining them, this (as an optimization) directly combines the integers.
Definition at line 406 of file Hashing.h.
References assert(), llvm::hashing::detail::hash_state::create(), llvm::sys::path::end(), llvm::hashing::detail::hash_state::finalize(), get_execution_seed(), get_hashable_data(), hash_short(), llvm::hashing::detail::hash_state::mix(), rotate, and store_and_advance().
std::enable_if_t<is_hashable_data<ValueT>::value, hash_code> llvm::hashing::detail::hash_combine_range_impl | ( | ValueT * | first, |
ValueT * | last | ||
) |
Implement the combining of integral values into a hash_code.
This overload is selected when the value type of the iterator is integral and when the input iterator is actually a pointer. Rather than computing a hash_code for each object and then combining them, this (as an optimization) directly combines the integers. Also, because the integers are stored in contiguous memory, this routine avoids copying each value and directly reads from the underlying memory.
Definition at line 450 of file Hashing.h.
References llvm::hashing::detail::hash_state::create(), get_execution_seed(), and hash_short().
Referenced by llvm::hash_combine_range().
|
inline |
Helper to hash the value of a single integer.
Overloads for smaller integer types are not provided to ensure consistent behavior in the presence of integral promotions. Essentially, "hash_value('4')" and "hash_value('0' + 4)" should be the same.
Definition at line 620 of file Hashing.h.
References fetch32(), get_execution_seed(), and hash_16_bytes().
Referenced by llvm::hash_value().
Definition at line 245 of file Hashing.h.
References hash_17to32_bytes(), hash_1to3_bytes(), hash_33to64_bytes(), hash_4to8_bytes(), hash_9to16_bytes(), and k2.
Referenced by llvm::hashing::detail::hash_combine_recursive_helper::combine(), and hash_combine_range_impl().
hash_code llvm::hashing::detail::hash_value_tuple_helper | ( | const std::tuple< Ts... > & | arg, |
std::index_sequence< Indices... > | indices | ||
) |
Definition at line 658 of file Hashing.h.
References llvm::hash_combine().
Referenced by llvm::hash_value().
|
inline |
Bitwise right rotate.
Normally this will compile to a single instruction, especially if the shift is a manifest constant.
Definition at line 173 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_state::create(), hash_17to32_bytes(), hash_33to64_bytes(), hash_9to16_bytes(), llvm::hashing::detail::hash_state::mix(), and llvm::hashing::detail::hash_state::mix_32_bytes().
|
inline |
Definition at line 178 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_state::create(), llvm::hashing::detail::hash_state::finalize(), hash_1to3_bytes(), and hash_33to64_bytes().
|
inline |
Definition at line 36 of file StableHashing.h.
References FNV_PRIME_64.
Referenced by stable_hash_append(), llvm::stable_hash_combine(), llvm::stable_hash_combine_array(), llvm::stable_hash_combine_range(), and llvm::stable_hash_combine_string().
|
inline |
Definition at line 41 of file StableHashing.h.
References I, and stable_hash_append().
bool llvm::hashing::detail::store_and_advance | ( | char *& | buffer_ptr, |
char * | buffer_end, | ||
const T & | value, | ||
size_t | offset = 0 |
||
) |
Helper to store data from a value into a buffer and advance the pointer into that buffer.
This routine first checks whether there is enough space in the provided buffer, and if not immediately returns false. If there is space, it copies the underlying bytes of value into the buffer, advances the buffer_ptr past the copied bytes, and returns true.
Definition at line 389 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_combine_recursive_helper::combine_data(), and hash_combine_range_impl().
uint64_t llvm::hashing::detail::fixed_seed_override = 0 |
A global, fixed seed-override variable.
This variable can be set using the
Definition at line 22 of file Hashing.cpp.
Referenced by get_execution_seed(), and llvm::set_fixed_execution_hash_seed().
const uint64_t llvm::hashing::detail::FNV_OFFSET_64 = 14695981039346656037u |
Definition at line 34 of file StableHashing.h.
Referenced by llvm::stable_hash_combine(), llvm::stable_hash_combine_array(), llvm::stable_hash_combine_range(), and llvm::stable_hash_combine_string().
const uint64_t llvm::hashing::detail::FNV_PRIME_64 = 1099511628211u |
Definition at line 33 of file StableHashing.h.
Referenced by stable_hash_append().
|
static |
Some primes between 2^63 and 2^64 for various uses.
Definition at line 165 of file Hashing.h.
Referenced by hash_17to32_bytes(), and hash_33to64_bytes().
|
static |
Definition at line 166 of file Hashing.h.
Referenced by llvm::hashing::detail::hash_state::create(), llvm::hashing::detail::hash_state::finalize(), hash_17to32_bytes(), and llvm::hashing::detail::hash_state::mix().
|
static |
Definition at line 167 of file Hashing.h.
Referenced by hash_17to32_bytes(), hash_1to3_bytes(), hash_33to64_bytes(), and hash_short().
|
static |
Definition at line 168 of file Hashing.h.
Referenced by hash_17to32_bytes(), and hash_1to3_bytes().