27#define TYPE_RECORD(ename, value, name) \
30#include "llvm/DebugInfo/CodeView/CodeViewTypes.def"
51 W->getOStream() <<
" (" <<
HexNumber(Index.getIndex()) <<
")";
52 W->getOStream() <<
" {\n";
63 W->startLine() <<
"}\n";
69 W->getOStream() <<
" {\n";
80 W->startLine() <<
"}\n";
99 auto Indices = Args.getIndices();
111 uint32_t
Size = Indices.size();
112 W->printNumber(
"NumStrings",
Size);
114 for (uint32_t
I = 0;
I <
Size; ++
I) {
121 uint16_t Props =
static_cast<uint16_t
>(
Class.getOptions());
122 W->printNumber(
"MemberCount",
Class.getMemberCount());
127 W->printNumber(
"SizeOf",
Class.getSize());
128 W->printString(
"Name",
Class.getName());
130 W->printString(
"LinkageName",
Class.getUniqueName());
135 uint16_t Props =
static_cast<uint16_t
>(
Union.getOptions());
136 W->printNumber(
"MemberCount",
Union.getMemberCount());
139 W->printNumber(
"SizeOf",
Union.getSize());
140 W->printString(
"Name",
Union.getName());
142 W->printString(
"LinkageName",
Union.getUniqueName());
147 uint16_t Props =
static_cast<uint16_t
>(
Enum.getOptions());
148 W->printNumber(
"NumEnumerators",
Enum.getMemberCount());
149 W->printFlags(
"Properties", uint16_t(
Enum.getOptions()),
153 W->printString(
"Name",
Enum.getName());
155 W->printString(
"LinkageName",
Enum.getUniqueName());
162 W->printNumber(
"SizeOf", AT.
getSize());
163 W->printString(
"Name", AT.
getName());
171 W->printString(
"VFTableName", VFT.
getName());
173 W->printString(
"MethodName",
N);
180 W->printString(
"Name",
Id.getName());
186 W->printEnum(
"CallingConvention", uint8_t(Proc.
getCallConv()),
188 W->printFlags(
"FunctionOptions", uint8_t(Proc.
getOptions()),
199 W->printEnum(
"CallingConvention", uint8_t(MF.
getCallConv()),
201 W->printFlags(
"FunctionOptions", uint8_t(MF.
getOptions()),
209Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
211 for (
const auto &M : MethodList.
getMethods()) {
212 ListScope S(*W,
"Method");
213 printMemberAttributes(
M.getAccess(),
M.getMethodKind(),
M.getOptions());
215 if (
M.isIntroducingVirtual())
216 W->printHex(
"VFTableOffset",
M.getVFTableOffset());
224 W->printString(
"Name",
Func.getName());
230 W->printNumber(
"Age", TS.
getAge());
231 W->printString(
"Name", TS.
getName());
240 W->printNumber(
"IsFlat", Ptr.
isFlat());
241 W->printNumber(
"IsConst", Ptr.
isConst());
242 W->printNumber(
"IsVolatile", Ptr.
isVolatile());
244 W->printNumber(
"IsRestrict", Ptr.
isRestrict());
247 W->printNumber(
"SizeOf", Ptr.
getSize());
253 W->printEnum(
"Representation", uint16_t(
MI.getRepresentation()),
261 uint16_t Mods =
static_cast<uint16_t
>(
Mod.getModifiers());
270 W->printNumber(
"BitSize",
BitField.getBitSize());
271 W->printNumber(
"BitOffset",
BitField.getBitOffset());
275Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
281Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
285 W->printNumber(
"LineNumber",
Line.getLineNumber());
289Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
293 W->printNumber(
"LineNumber",
Line.getLineNumber());
294 W->printNumber(
"Module",
Line.getModule());
299 W->printNumber(
"NumArgs",
static_cast<uint32_t
>(
Args.getArgs().size()));
302 for (
auto Arg :
Args.getArgs()) {
309 return printMemberAttributes(
Attrs.getAccess(),
Attrs.getMethodKind(),
326 W->printHex(
"UnknownMember",
unsigned(
Record.Kind));
346 printMemberAttributes(Method.getAccess(), K, Method.getOptions());
349 if (Method.isIntroducingVirtual())
350 W->
printHex(
"VFTableOffset", Method.getVFTableOffset());
357 W->
printHex(
"MethodCount", Method.getNumOverloads());
368 W->printHex(
"FieldOffset",
Field.getFieldOffset());
369 W->printString(
"Name",
Field.getName());
378 W->printString(
"Name",
Field.getName());
392 W->printNumber(
"EnumValue",
Enum.getValue());
393 W->printString(
"Name",
Enum.getName());
402 W->printHex(
"BaseOffset",
Base.getBaseOffset());
412 W->printHex(
"VBPtrOffset",
Base.getVBPtrOffset());
413 W->printHex(
"VBTableIndex",
Base.getVTableIndex());
428Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
437Error TypeDumpVisitor::visitKnownRecord(
CVType &CVR,
AMDGPU Lower Kernel Arguments
OptimizedStructLayoutField Field
static StringRef getLeafTypeName(TypeLeafKind LT)
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)
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.
bool isRValueReferenceThisPtr() const
TypeIndex getReferentType() const
MemberPointerInfo getMemberInfo() const
bool isPointerToMember() const
bool isLValueReferenceThisPtr() const
PointerMode getMode() const
PointerKind getPointerKind() const
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.
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getMethodOptionNames()
MethodKind
Part of member attribute flags. (CV_methodprop_e)
LLVM_ABI ArrayRef< EnumEntry< uint8_t > > getCallingConventions()
LLVM_ABI ArrayRef< EnumEntry< uint8_t > > getMemberAccessNames()
CVRecord< TypeLeafKind > CVType
LLVM_ABI ArrayRef< EnumEntry< uint8_t > > getPtrKindNames()
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getPtrMemberRepNames()
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getLabelTypeEnum()
LLVM_ABI ArrayRef< EnumEntry< TypeLeafKind > > getTypeLeafNames()
LLVM_ABI Error visitMemberRecordStream(ArrayRef< uint8_t > FieldList, TypeVisitorCallbacks &Callbacks)
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getTypeModifierNames()
MethodOptions
Equivalent to CV_fldattr_t bitfield.
LLVM_ABI StringRef getBytesAsCharacters(ArrayRef< uint8_t > LeafData)
Reinterpret a byte array as an array of characters.
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getMemberKindNames()
MemberAccess
Source-level access specifier. (CV_access_e)
TypeLeafKind
Duplicate copy of the above enum, but using the official CV names.
LLVM_ABI ArrayRef< EnumEntry< uint8_t > > getPtrModeNames()
LLVM_ABI ArrayRef< EnumEntry< uint8_t > > getFunctionOptionEnum()
LLVM_ABI ArrayRef< EnumEntry< uint16_t > > getClassOptionNames()
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.
Equvalent to CV_fldattr_t in cvinfo.h.