LLVM 20.0.0git
|
Provides amortized O(1) random access to a CodeView type stream. More...
#include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
Provides amortized O(1) random access to a CodeView type stream.
Normally to access a type from a type stream, you must know its byte offset into the type stream, because type records are variable-lengthed. However, this is not the way we prefer to access them. For example, given a symbol record one of the fields may be the TypeIndex of the symbol's type record. Or given a type record such as an array type, there might be a TypeIndex for the element type. Sequential access is perfect when we're just dumping every entry, but it's very poor for real world usage.
Type streams in PDBs contain an additional field which is a list of pairs containing indices and their corresponding offsets, roughly every ~8KB of record data. This general idea need not be confined to PDBs though. By supplying such an array, the producer of a type stream can allow the consumer much better access time, because the consumer can find the nearest index in this array, and do a linear scan forward only from there.
LazyRandomTypeCollection implements this algorithm, but additionally goes one step further by caching offsets of every record that has been visited at least once. This way, even repeated visits of the same record will never require more than one linear scan. For a type stream of N elements divided into M chunks of roughly equal size, this yields a worst case lookup time of O(N/M) and an amortized time of O(1).
Definition at line 48 of file LazyRandomTypeCollection.h.
|
explicit |
Definition at line 33 of file LazyRandomTypeCollection.cpp.
Definition at line 49 of file LazyRandomTypeCollection.cpp.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | ArrayRef< uint8_t > | Data, |
uint32_t | RecordCountHint | ||
) |
Definition at line 44 of file LazyRandomTypeCollection.cpp.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
uint32_t | RecordCountHint, | ||
PartialOffsetArray | PartialOffsets | ||
) |
Definition at line 37 of file LazyRandomTypeCollection.cpp.
References Allocator.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
uint32_t | RecordCountHint | ||
) |
Definition at line 54 of file LazyRandomTypeCollection.cpp.
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 146 of file LazyRandomTypeCollection.cpp.
Implements llvm::codeview::TypeCollection.
Definition at line 133 of file LazyRandomTypeCollection.cpp.
Referenced by getOffsetOfType(), getType(), and tryGetType().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 202 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), llvm::codeview::EC, and llvm::codeview::TypeIndex::fromArrayIndex().
Implements llvm::codeview::TypeCollection.
Definition at line 211 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), and llvm::codeview::EC.
Definition at line 81 of file LazyRandomTypeCollection.cpp.
References assert(), contains(), and error.
Implements llvm::codeview::TypeCollection.
Definition at line 88 of file LazyRandomTypeCollection.cpp.
References assert(), contains(), llvm::codeview::EC, and error.
Referenced by llvm::pdb::NativeInlineSiteSymbol::getName(), llvm::logicalview::LVLogicalVisitor::processLines(), llvm::logicalview::LVSymbolVisitor::visitKnownRecord(), and llvm::logicalview::LVLogicalVisitor::visitKnownRecord().
Implements llvm::codeview::TypeCollection.
Definition at line 111 of file LazyRandomTypeCollection.cpp.
References llvm::codeview::computeTypeName(), llvm::consumeError(), llvm::codeview::EC, I, Name, llvm::StringSaver::save(), and llvm::codeview::TypeIndex::simpleTypeName().
Referenced by llvm::pdb::NativeInlineSiteSymbol::getName(), and llvm::logicalview::LVTypeVisitor::visitKnownRecord().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 279 of file LazyRandomTypeCollection.cpp.
References llvm_unreachable.
Definition at line 75 of file LazyRandomTypeCollection.cpp.
References llvm::Data, llvm::little, and reset().
Referenced by reset().
void LazyRandomTypeCollection::reset | ( | BinaryStreamReader & | Reader, |
uint32_t | RecordCountHint | ||
) |
Definition at line 58 of file LazyRandomTypeCollection.cpp.
References llvm::BinaryStreamReader::bytesRemaining(), error, and llvm::BinaryStreamReader::readArray().
Definition at line 70 of file LazyRandomTypeCollection.cpp.
References llvm::Data, llvm::little, and reset().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 144 of file LazyRandomTypeCollection.cpp.
Referenced by llvm::logicalview::LVTypeVisitor::visitTypeBegin().
Definition at line 98 of file LazyRandomTypeCollection.cpp.
References assert(), llvm::consumeError(), contains(), and llvm::codeview::EC.
Referenced by llvm::logicalview::LVSymbolVisitor::visitKnownRecord().