25#define CV_TYPE(enum, val) {#enum, enum},
26#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
29#define ENUM_ENTRY(enum_class, enum) \
30 { #enum, std::underlying_type_t<enum_class>(enum_class::enum) }
153#define TYPE_RECORD(ename, value, name) \
156#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
160 return "UnknownLeaf";
177 W->getOStream() <<
" (" <<
HexNumber(Index.getIndex()) <<
")";
178 W->getOStream() <<
" {\n";
180 W->printEnum(
"TypeLeafKind",
unsigned(
Record.kind()),
186 if (PrintRecordBytes)
190 W->startLine() <<
"}\n";
196 W->getOStream() <<
" {\n";
203 if (PrintRecordBytes)
207 W->startLine() <<
"}\n";
211Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
226 auto Indices = Args.getIndices();
238 uint32_t
Size = Indices.size();
239 W->printNumber(
"NumStrings",
Size);
241 for (uint32_t
I = 0;
I <
Size; ++
I) {
248 uint16_t Props =
static_cast<uint16_t
>(
Class.getOptions());
249 W->printNumber(
"MemberCount",
Class.getMemberCount());
254 W->printNumber(
"SizeOf",
Class.getSize());
255 W->printString(
"Name",
Class.getName());
257 W->printString(
"LinkageName",
Class.getUniqueName());
262 uint16_t Props =
static_cast<uint16_t
>(
Union.getOptions());
263 W->printNumber(
"MemberCount",
Union.getMemberCount());
266 W->printNumber(
"SizeOf",
Union.getSize());
267 W->printString(
"Name",
Union.getName());
269 W->printString(
"LinkageName",
Union.getUniqueName());
274 uint16_t Props =
static_cast<uint16_t
>(
Enum.getOptions());
275 W->printNumber(
"NumEnumerators",
Enum.getMemberCount());
276 W->printFlags(
"Properties", uint16_t(
Enum.getOptions()),
280 W->printString(
"Name",
Enum.getName());
282 W->printString(
"LinkageName",
Enum.getUniqueName());
289 W->printNumber(
"SizeOf", AT.
getSize());
290 W->printString(
"Name", AT.
getName());
298 W->printString(
"VFTableName", VFT.
getName());
300 W->printString(
"MethodName",
N);
307 W->printString(
"Name",
Id.getName());
313 W->printEnum(
"CallingConvention", uint8_t(Proc.
getCallConv()),
315 W->printFlags(
"FunctionOptions", uint8_t(Proc.
getOptions()),
326 W->printEnum(
"CallingConvention", uint8_t(MF.
getCallConv()),
328 W->printFlags(
"FunctionOptions", uint8_t(MF.
getOptions()),
336Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
338 for (
const auto &M : MethodList.
getMethods()) {
339 ListScope S(*W,
"Method");
340 printMemberAttributes(
M.getAccess(),
M.getMethodKind(),
M.getOptions());
342 if (
M.isIntroducingVirtual())
343 W->printHex(
"VFTableOffset",
M.getVFTableOffset());
351 W->printString(
"Name",
Func.getName());
357 W->printNumber(
"Age", TS.
getAge());
358 W->printString(
"Name", TS.
getName());
364 W->printEnum(
"PtrType",
unsigned(
Ptr.getPointerKind()),
368 W->printNumber(
"IsFlat",
Ptr.isFlat());
369 W->printNumber(
"IsConst",
Ptr.isConst());
370 W->printNumber(
"IsVolatile",
Ptr.isVolatile());
371 W->printNumber(
"IsUnaligned",
Ptr.isUnaligned());
372 W->printNumber(
"IsRestrict",
Ptr.isRestrict());
373 W->printNumber(
"IsThisPtr&",
Ptr.isLValueReferenceThisPtr());
374 W->printNumber(
"IsThisPtr&&",
Ptr.isRValueReferenceThisPtr());
375 W->printNumber(
"SizeOf",
Ptr.getSize());
377 if (
Ptr.isPointerToMember()) {
378 const MemberPointerInfo &
MI =
Ptr.getMemberInfo();
381 W->printEnum(
"Representation", uint16_t(
MI.getRepresentation()),
389 uint16_t Mods =
static_cast<uint16_t
>(
Mod.getModifiers());
398 W->printNumber(
"BitSize",
BitField.getBitSize());
399 W->printNumber(
"BitOffset",
BitField.getBitOffset());
403Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
409Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
413 W->printNumber(
"LineNumber",
Line.getLineNumber());
417Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
421 W->printNumber(
"LineNumber",
Line.getLineNumber());
422 W->printNumber(
"Module",
Line.getModule());
427 W->printNumber(
"NumArgs",
static_cast<uint32_t
>(
Args.getArgs().size()));
430 for (
auto Arg :
Args.getArgs()) {
437 return printMemberAttributes(
Attrs.getAccess(),
Attrs.getMethodKind(),
449 W->printFlags(
"MethodOptions",
unsigned(
Options),
455 W->printHex(
"UnknownMember",
unsigned(
Record.Kind));
475 printMemberAttributes(Method.getAccess(), K, Method.getOptions());
478 if (Method.isIntroducingVirtual())
479 W->
printHex(
"VFTableOffset", Method.getVFTableOffset());
486 W->
printHex(
"MethodCount", Method.getNumOverloads());
497 W->printHex(
"FieldOffset",
Field.getFieldOffset());
498 W->printString(
"Name",
Field.getName());
507 W->printString(
"Name",
Field.getName());
521 W->printNumber(
"EnumValue",
Enum.getValue());
522 W->printString(
"Name",
Enum.getName());
531 W->printHex(
"BaseOffset",
Base.getBaseOffset());
541 W->printHex(
"VBPtrOffset",
Base.getVBPtrOffset());
542 W->printHex(
"VBTableIndex",
Base.getVTableIndex());
557Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
566Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
AMDGPU Lower Kernel Arguments
static const EnumEntry< uint16_t > MemberKindNames[]
static const EnumEntry< uint16_t > TypeModifierNames[]
static const EnumEntry< uint16_t > PtrMemberRepNames[]
static const EnumEntry< uint8_t > CallingConventions[]
static const EnumEntry< uint8_t > FunctionOptionEnum[]
static const EnumEntry< uint16_t > LabelTypeEnum[]
static const EnumEntry< uint16_t > MethodOptionNames[]
static const EnumEntry< uint8_t > MemberAccessNames[]
static const EnumEntry< uint8_t > PtrModeNames[]
static const EnumEntry< uint16_t > ClassOptionNames[]
static const EnumEntry< uint8_t > PtrKindNames[]
OptimizedStructLayoutField Field
#define ENUM_ENTRY(enum_class, enum)
static StringRef getLeafTypeName(TypeLeafKind LT)
static const EnumEntry< TypeLeafKind > LeafTypeNames[]
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
static ErrorSuccess success()
Create a success value.
virtual void printString(StringRef Value)
virtual void printNumber(StringRef Label, char Value)
void printHex(StringRef Label, T Value)
StringRef - Represent a constant reference to a string, i.e.
TypeIndex getElementType() const
TypeIndex getIndexType() const
StringRef getName() const
uint32_t getSignature() const
LF_INDEX - Used to chain two large LF_FIELDLIST or LF_METHODLIST records together.
TypeIndex getContinuationIndex() const
TypeIndex getReturnType() const
int32_t getThisPointerAdjustment() const
TypeIndex getArgumentList() const
uint16_t getParameterCount() const
TypeIndex getThisType() const
FunctionOptions getOptions() const
TypeIndex getClassType() const
CallingConvention getCallConv() const
ArrayRef< OneMethodRecord > getMethods() const
For method overload sets. LF_METHOD.
uint32_t getSignature() const
StringRef getPrecompFilePath() const
uint32_t getTypesCount() const
uint32_t getStartTypeIndex() const
TypeIndex getReturnType() const
TypeIndex getArgumentList() const
uint16_t getParameterCount() const
FunctionOptions getOptions() const
CallingConvention getCallConv() const
ArrayRef< TypeIndex > getIndices() const
Error visitTypeEnd(CVType &Record) override
void printTypeIndex(StringRef FieldName, TypeIndex TI) const
Error visitUnknownMember(CVMemberRecord &Record) override
Error visitMemberEnd(CVMemberRecord &Record) override
Error visitUnknownType(CVType &Record) override
Action to take on unknown types. By default, they are ignored.
void printItemIndex(StringRef FieldName, TypeIndex TI) const
Error visitTypeBegin(CVType &Record) override
Paired begin/end actions for all types.
Error visitMemberBegin(CVMemberRecord &Record) override
static TypeIndex fromArrayIndex(uint32_t Index)
StringRef getName() const
const GUID & getGuid() const
TypeIndex getType() const
uint32_t getVFPtrOffset() const
TypeIndex getOverriddenVTable() const
ArrayRef< StringRef > getMethodNames() const
StringRef getName() const
TypeIndex getCompleteClass() const
uint32_t getEntryCount() const
constexpr char Args[]
Key for Kernel::Metadata::mArgs.
constexpr char Attrs[]
Key for Kernel::Metadata::mAttrs.
@ Swift
Calling convention for Swift.
This namespace contains an enum with a value for every intrinsic/builtin function known by LLVM.
PointerMode
Equivalent to CV_ptrmode_e.
@ PointerToMemberFunction
MethodKind
Part of member attribute flags. (CV_methodprop_e)
CVRecord< TypeLeafKind > CVType
PointerKind
Equivalent to CV_ptrtype_e.
@ HasConstructorOrDestructor
@ HasOverloadedAssignmentOperator
PointerToMemberRepresentation
Equivalent to CV_pmtype_e.
@ MultipleInheritanceData
@ SingleInheritanceFunction
@ VirtualInheritanceFunction
@ MultipleInheritanceFunction
LLVM_ABI Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
CallingConvention
These values correspond to the CV_call_e enumeration, and are documented at the following locations: ...
MethodOptions
Equivalent to CV_fldattr_t bitfield.
LLVM_ABI StringRef getBytesAsCharacters(ArrayRef< uint8_t > LeafData)
Reinterpret a byte array as an array of characters.
@ ConstructorWithVirtualBases
MemberAccess
Source-level access specifier. (CV_access_e)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
ModifierOptions
Equivalent to CV_modifier_t.
LabelType
Equivalent to CV_LABEL_TYPE_e.
LLVM_ABI void printTypeIndex(ScopedPrinter &Printer, StringRef FieldName, TypeIndex TI, TypeCollection &Types)
NodeAddr< FuncNode * > Func
This is an optimization pass for GlobalISel generic memory operations.
auto formatv(bool Validate, const char *Fmt, Ts &&...Vals)
@ Mod
The access may modify the value stored in memory.
ArrayRef(const T &OneElt) -> ArrayRef< T >
Equvalent to CV_fldattr_t in cvinfo.h.