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 31 of file LazyRandomTypeCollection.cpp.
Definition at line 47 of file LazyRandomTypeCollection.cpp.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | ArrayRef< uint8_t > | Data, |
uint32_t | RecordCountHint | ||
) |
Definition at line 42 of file LazyRandomTypeCollection.cpp.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
uint32_t | RecordCountHint, | ||
PartialOffsetArray | PartialOffsets | ||
) |
Definition at line 35 of file LazyRandomTypeCollection.cpp.
References Allocator.
LazyRandomTypeCollection::LazyRandomTypeCollection | ( | const CVTypeArray & | Types, |
uint32_t | RecordCountHint | ||
) |
Definition at line 52 of file LazyRandomTypeCollection.cpp.
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 144 of file LazyRandomTypeCollection.cpp.
Implements llvm::codeview::TypeCollection.
Definition at line 131 of file LazyRandomTypeCollection.cpp.
Referenced by getOffsetOfType(), getType(), and tryGetType().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 200 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), llvm::codeview::EC, and llvm::codeview::TypeIndex::fromArrayIndex().
Implements llvm::codeview::TypeCollection.
Definition at line 209 of file LazyRandomTypeCollection.cpp.
References llvm::consumeError(), and llvm::codeview::EC.
Definition at line 79 of file LazyRandomTypeCollection.cpp.
References assert(), contains(), and error.
Implements llvm::codeview::TypeCollection.
Definition at line 86 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 109 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 277 of file LazyRandomTypeCollection.cpp.
References llvm_unreachable.
Definition at line 73 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 56 of file LazyRandomTypeCollection.cpp.
References llvm::BinaryStreamReader::bytesRemaining(), error, and llvm::BinaryStreamReader::readArray().
Definition at line 68 of file LazyRandomTypeCollection.cpp.
References llvm::Data, llvm::little, and reset().
|
overridevirtual |
Implements llvm::codeview::TypeCollection.
Definition at line 142 of file LazyRandomTypeCollection.cpp.
Referenced by llvm::logicalview::LVTypeVisitor::visitTypeBegin().
Definition at line 96 of file LazyRandomTypeCollection.cpp.
References assert(), llvm::consumeError(), contains(), and llvm::codeview::EC.
Referenced by llvm::logicalview::LVSymbolVisitor::visitKnownRecord().