Go to the documentation of this file.
61 return 2 + Sizes[
N - LF_NUMERIC];
65 const char *
S =
reinterpret_cast<const char *
>(
Data.data());
256 if (Pad >= LF_PAD0) {
281 case TypeLeafKind::LF_FUNC_ID:
285 case TypeLeafKind::LF_MFUNC_ID:
288 case TypeLeafKind::LF_STRING_ID:
291 case TypeLeafKind::LF_SUBSTR_LIST:
296 case TypeLeafKind::LF_BUILDINFO:
301 case TypeLeafKind::LF_UDT_SRC_LINE:
305 case TypeLeafKind::LF_UDT_MOD_SRC_LINE:
308 case TypeLeafKind::LF_MODIFIER:
311 case TypeLeafKind::LF_PROCEDURE:
315 case TypeLeafKind::LF_MFUNCTION:
319 case TypeLeafKind::LF_ARGLIST:
324 case TypeLeafKind::LF_ARRAY:
327 case TypeLeafKind::LF_CLASS:
328 case TypeLeafKind::LF_STRUCTURE:
329 case TypeLeafKind::LF_INTERFACE:
332 case TypeLeafKind::LF_UNION:
335 case TypeLeafKind::LF_ENUM:
338 case TypeLeafKind::LF_BITFIELD:
341 case TypeLeafKind::LF_VFTABLE:
344 case TypeLeafKind::LF_VTSHAPE:
346 case TypeLeafKind::LF_METHODLIST:
349 case TypeLeafKind::LF_FIELDLIST:
352 case TypeLeafKind::LF_POINTER:
367 case SymbolKind::S_GPROC32_ID:
368 case SymbolKind::S_LPROC32_ID:
369 case SymbolKind::S_LPROC32_DPC:
370 case SymbolKind::S_LPROC32_DPC_ID:
373 case SymbolKind::S_GPROC32:
374 case SymbolKind::S_LPROC32:
377 case SymbolKind::S_UDT:
380 case SymbolKind::S_GDATA32:
381 case SymbolKind::S_LDATA32:
384 case SymbolKind::S_BUILDINFO:
387 case SymbolKind::S_LTHREAD32:
388 case SymbolKind::S_GTHREAD32:
391 case SymbolKind::S_FILESTATIC:
394 case SymbolKind::S_LOCAL:
397 case SymbolKind::S_REGISTER:
400 case SymbolKind::S_CONSTANT:
403 case SymbolKind::S_BPREL32:
404 case SymbolKind::S_REGREL32:
407 case SymbolKind::S_CALLSITEINFO:
410 case SymbolKind::S_CALLERS:
411 case SymbolKind::S_CALLEES:
412 case SymbolKind::S_INLINEES:
417 case SymbolKind::S_INLINESITE:
420 case SymbolKind::S_HEAPALLOCSITE:
425 case SymbolKind::S_DEFRANGE_REGISTER:
426 case SymbolKind::S_DEFRANGE_REGISTER_REL:
427 case SymbolKind::S_DEFRANGE_FRAMEPOINTER_REL:
428 case SymbolKind::S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE:
429 case SymbolKind::S_DEFRANGE_SUBFIELD_REGISTER:
430 case SymbolKind::S_DEFRANGE_SUBFIELD:
434 case SymbolKind::S_LABEL32:
435 case SymbolKind::S_OBJNAME:
436 case SymbolKind::S_COMPILE:
437 case SymbolKind::S_COMPILE2:
438 case SymbolKind::S_COMPILE3:
439 case SymbolKind::S_ENVBLOCK:
440 case SymbolKind::S_BLOCK32:
441 case SymbolKind::S_FRAMEPROC:
442 case SymbolKind::S_THUNK32:
443 case SymbolKind::S_FRAMECOOKIE:
444 case SymbolKind::S_UNAMESPACE:
447 case SymbolKind::S_END:
448 case SymbolKind::S_INLINESITE_END:
449 case SymbolKind::S_PROC_ID_END:
473 for (
const auto &
Ref : Refs) {
static uint32_t handleListContinuation(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
void setOffset(uint64_t Off)
This is an optimization pass for GlobalISel generic memory operations.
static uint32_t getEncodedIntegerLength(ArrayRef< uint8_t > Data)
static const uint32_t PointerModeShift
This currently compiles esp xmm0 movsd esp eax eax esp ret We should use not the dag combiner This is because dagcombine2 needs to be able to see through the X86ISD::Wrapper which DAGCombine can t really do The code for turning x load into a single vector load is target independent and should be moved to the dag combiner The code for turning x load into a vector load can only handle a direct load from a global or a direct load from the stack It should be generalized to handle any load from P
SymbolKind
Duplicate copy of the above enum, but using the official CV names.
static void resolveTypeIndexReferences(ArrayRef< uint8_t > RecordData, ArrayRef< TiReference > Refs, SmallVectorImpl< TypeIndex > &Indices)
static uint32_t handleDataMember(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
This is a 'vector' (really, a variable-sized array), optimized for the case when the array is small.
uint16_t read16le(const void *P)
static bool isIntroVirtual(uint16_t Attrs)
The instances of the Type class are immutable: once they are created, they are never changed.
FixedStreamArray is similar to VarStreamArray, except with each record having a fixed-length.
static uint32_t handleEnumerator(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
bool empty() const
empty - Check if the array is empty.
static uint32_t handleBaseClass(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
@ Ref
The access may reference the value stored in memory.
static uint32_t handleOneMethod(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
void append(in_iter in_start, in_iter in_end)
Add the specified range to the end of the SmallVector.
static void handleFieldList(ArrayRef< uint8_t > Content, SmallVectorImpl< TiReference > &Refs)
MethodKind
Part of member attribute flags. (CV_methodprop_e)
FixedStreamArrayIterator< T > begin() const
PointerMode
Equivalent to CV_ptrmode_e.
Provides read only access to a subclass of BinaryStream.
detail::packed_endian_specific_integral< uint32_t, little, unaligned > ulittle32_t
static bool isMemberPointer(uint32_t Attrs)
ArrayRef< T > drop_front(size_t N=1) const
Drop the first N elements of the array.
bool discoverTypeIndicesInSymbol(const CVSymbol &Symbol, SmallVectorImpl< TiReference > &Refs)
Discover type indices in symbol records.
static MethodKind getMethodKind(uint16_t Attrs)
assert(ImpDefSCC.getReg()==AMDGPU::SCC &&ImpDefSCC.isDef())
FixedStreamArrayIterator< T > end() const
static void handlePointer(ArrayRef< uint8_t > Content, SmallVectorImpl< TiReference > &Refs)
ArrayRef< uint8_t > content() const
void cantFail(Error Err, const char *Msg=nullptr)
Report a fatal error if Err is a failure value.
static const uint32_t PointerModeMask
add sub stmia L5 ldr r0 bl L_printf $stub Instead of a and a wouldn t it be better to do three moves *Return an aggregate type is even return S
static PointerMode getPointerMode(uint32_t Attrs)
static uint32_t getCStringLength(ArrayRef< uint8_t > Data)
@ PointerToMemberFunction
static void discoverTypeIndices(ArrayRef< uint8_t > Content, TypeLeafKind Kind, SmallVectorImpl< TiReference > &Refs)
void discoverTypeIndices(ArrayRef< uint8_t > RecordData, SmallVectorImpl< TiReference > &Refs)
static uint32_t handleVFPtr(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
uint32_t read32le(const void *P)
static uint32_t handleVirtualBaseClass(ArrayRef< uint8_t > Data, uint32_t Offset, bool IsIndirect, SmallVectorImpl< TiReference > &Refs)
This class consists of common code factored out of the SmallVector class to reduce code duplication b...
#define LLVM_UNLIKELY(EXPR)
static uint32_t handleStaticDataMember(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
Error readArray(ArrayRef< T > &Array, uint32_t NumElements)
Get a reference to a NumElements element array of objects of type T from the underlying stream as if ...
static void handleMethodOverloadList(ArrayRef< uint8_t > Content, SmallVectorImpl< TiReference > &Refs)
static uint32_t handleNestedType(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)
static uint32_t handleOverloadedMethod(ArrayRef< uint8_t > Data, uint32_t Offset, SmallVectorImpl< TiReference > &Refs)