LLVM 20.0.0git
|
A globally hashed type represents a hash value that is sufficient to uniquely identify a record across multiple type streams or type sequences. More...
#include "llvm/DebugInfo/CodeView/TypeHashing.h"
Public Member Functions | |
GloballyHashedType ()=default | |
GloballyHashedType (StringRef H) | |
GloballyHashedType (ArrayRef< uint8_t > H) | |
bool | empty () const |
Static Public Member Functions | |
static GloballyHashedType | hashType (ArrayRef< uint8_t > RecordData, ArrayRef< GloballyHashedType > PreviousTypes, ArrayRef< GloballyHashedType > PreviousIds) |
Given a sequence of bytes representing a record, compute a global hash for this record. | |
static GloballyHashedType | hashType (CVType Type, ArrayRef< GloballyHashedType > PreviousTypes, ArrayRef< GloballyHashedType > PreviousIds) |
Given a sequence of bytes representing a record, compute a global hash for this record. | |
template<typename Range > | |
static std::vector< GloballyHashedType > | hashTypes (Range &&Records) |
Given a sequence of combined type and ID records, compute global hashes for each of them, returning the results in a vector of hashed types. | |
template<typename Range > | |
static std::vector< GloballyHashedType > | hashIds (Range &&Records, ArrayRef< GloballyHashedType > TypeHashes) |
Given a sequence of combined type and ID records, compute global hashes for each of them, returning the results in a vector of hashed types. | |
static std::vector< GloballyHashedType > | hashTypeCollection (TypeCollection &Types) |
Public Attributes | |
std::array< uint8_t, 8 > | Hash |
Friends | |
bool | operator== (const GloballyHashedType &L, const GloballyHashedType &R) |
bool | operator!= (const GloballyHashedType &L, const GloballyHashedType &R) |
A globally hashed type represents a hash value that is sufficient to uniquely identify a record across multiple type streams or type sequences.
This works by, for any given record A which references B, replacing the TypeIndex that refers to B with a previously-computed global hash for B. As this is a recursive algorithm (e.g. the global hash of B also depends on the global hashes of the types that B refers to), a global hash can uniquely identify that A occurs in another stream that has a completely different graph structure. Although the hash itself is slower to compute, probing is much faster with a globally hashed type, because the hash itself is considered "as good as" the original type. Since type records can be quite large, this makes the equality comparison of the hash much faster than equality comparison of a full record.
Definition at line 80 of file TypeHashing.h.
|
default |
|
inline |
Definition at line 82 of file TypeHashing.h.
Definition at line 84 of file TypeHashing.h.
|
inline |
Definition at line 90 of file TypeHashing.h.
References Hash.
|
inlinestatic |
Given a sequence of combined type and ID records, compute global hashes for each of them, returning the results in a vector of hashed types.
Definition at line 160 of file TypeHashing.h.
References hashType().
|
static |
Given a sequence of bytes representing a record, compute a global hash for this record.
Due to the nature of global hashes incorporating the hashes of referenced records, this function requires a list of types and ids that RecordData might reference, indexable by TypeIndex.
Definition at line 33 of file TypeHashing.cpp.
References llvm::codeview::discoverTypeIndices(), llvm::ArrayRef< T >::drop_front(), llvm::TruncatedBLAKE3< NumBytes >::final(), llvm::codeview::IndexRef, llvm::BLAKE3::init(), llvm::Ref, llvm::ArrayRef< T >::slice(), llvm::ArrayRef< T >::take_front(), and llvm::BLAKE3::update().
Referenced by hashIds(), hashType(), hashTypeCollection(), hashTypes(), llvm::codeview::GlobalTypeTableBuilder::insertRecordBytes(), and llvm::codeview::GlobalTypeTableBuilder::replaceType().
|
inlinestatic |
Given a sequence of bytes representing a record, compute a global hash for this record.
Due to the nature of global hashes incorporating the hashes of referenced records, this function requires a list of types and ids that RecordData might reference, indexable by TypeIndex.
Definition at line 114 of file TypeHashing.h.
References hashType().
|
inlinestatic |
Definition at line 169 of file TypeHashing.h.
References hashType().
|
inlinestatic |
Given a sequence of combined type and ID records, compute global hashes for each of them, returning the results in a vector of hashed types.
Definition at line 123 of file TypeHashing.h.
References H, and hashType().
|
friend |
Definition at line 97 of file TypeHashing.h.
|
friend |
Definition at line 92 of file TypeHashing.h.
std::array<uint8_t, 8> llvm::codeview::GloballyHashedType::Hash |
Definition at line 88 of file TypeHashing.h.
Referenced by empty(), llvm::DenseMapInfo< codeview::GloballyHashedType >::getHashValue(), and GloballyHashedType().