Changeset View
Changeset View
Standalone View
Standalone View
llvm/include/llvm/IR/DebugInfoMetadata.h
Show First 20 Lines • Show All 1,020 Lines • ▼ Show 20 Lines | class DICompositeType : public DIType { | ||||
static DICompositeType * | static DICompositeType * | ||||
getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File, | getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File, | ||||
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, | unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, | ||||
uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | ||||
DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder, | DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder, | ||||
DITemplateParameterArray TemplateParams, StringRef Identifier, | DITemplateParameterArray TemplateParams, StringRef Identifier, | ||||
DIDerivedType *Discriminator, Metadata *DataLocation, | DIDerivedType *Discriminator, Metadata *DataLocation, | ||||
Metadata *Associated, Metadata *Allocated, StorageType Storage, | Metadata *Associated, Metadata *Allocated, Metadata *Rank, | ||||
bool ShouldCreate = true) { | StorageType Storage, bool ShouldCreate = true) { | ||||
return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File, | return getImpl( | ||||
Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits, | Context, Tag, getCanonicalMDString(Context, Name), File, Line, Scope, | ||||
Flags, Elements.get(), RuntimeLang, VTableHolder, | BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get(), | ||||
TemplateParams.get(), | RuntimeLang, VTableHolder, TemplateParams.get(), | ||||
getCanonicalMDString(Context, Identifier), Discriminator, | getCanonicalMDString(Context, Identifier), Discriminator, DataLocation, | ||||
DataLocation, Associated, Allocated, Storage, ShouldCreate); | Associated, Allocated, Rank, Storage, ShouldCreate); | ||||
} | } | ||||
static DICompositeType * | static DICompositeType * | ||||
getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, | getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File, | ||||
unsigned Line, Metadata *Scope, Metadata *BaseType, | unsigned Line, Metadata *Scope, Metadata *BaseType, | ||||
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, | uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, | ||||
DIFlags Flags, Metadata *Elements, unsigned RuntimeLang, | DIFlags Flags, Metadata *Elements, unsigned RuntimeLang, | ||||
Metadata *VTableHolder, Metadata *TemplateParams, | Metadata *VTableHolder, Metadata *TemplateParams, | ||||
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation, | MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation, | ||||
Metadata *Associated, Metadata *Allocated, StorageType Storage, | Metadata *Associated, Metadata *Allocated, Metadata *Rank, | ||||
bool ShouldCreate = true); | StorageType Storage, bool ShouldCreate = true); | ||||
TempDICompositeType cloneImpl() const { | TempDICompositeType cloneImpl() const { | ||||
return getTemporary( | return getTemporary(getContext(), getTag(), getName(), getFile(), getLine(), | ||||
getContext(), getTag(), getName(), getFile(), getLine(), getScope(), | getScope(), getBaseType(), getSizeInBits(), | ||||
getBaseType(), getSizeInBits(), getAlignInBits(), getOffsetInBits(), | getAlignInBits(), getOffsetInBits(), getFlags(), | ||||
getFlags(), getElements(), getRuntimeLang(), getVTableHolder(), | getElements(), getRuntimeLang(), getVTableHolder(), | ||||
getTemplateParams(), getIdentifier(), getDiscriminator(), | getTemplateParams(), getIdentifier(), | ||||
getRawDataLocation(), getRawAssociated(), getRawAllocated()); | getDiscriminator(), getRawDataLocation(), | ||||
getRawAssociated(), getRawAllocated(), getRawRank()); | |||||
} | } | ||||
public: | public: | ||||
DEFINE_MDNODE_GET( | DEFINE_MDNODE_GET( | ||||
DICompositeType, | DICompositeType, | ||||
(unsigned Tag, StringRef Name, DIFile *File, unsigned Line, | (unsigned Tag, StringRef Name, DIFile *File, unsigned Line, | ||||
DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, | DIScope *Scope, DIType *BaseType, uint64_t SizeInBits, | ||||
uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | ||||
DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder, | DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder, | ||||
DITemplateParameterArray TemplateParams = nullptr, | DITemplateParameterArray TemplateParams = nullptr, | ||||
StringRef Identifier = "", DIDerivedType *Discriminator = nullptr, | StringRef Identifier = "", DIDerivedType *Discriminator = nullptr, | ||||
Metadata *DataLocation = nullptr, Metadata *Associated = nullptr, | Metadata *DataLocation = nullptr, Metadata *Associated = nullptr, | ||||
Metadata *Allocated = nullptr), | Metadata *Allocated = nullptr, Metadata *Rank = nullptr), | ||||
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, | (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, | ||||
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams, | OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams, | ||||
Identifier, Discriminator, DataLocation, Associated, Allocated)) | Identifier, Discriminator, DataLocation, Associated, Allocated, Rank)) | ||||
DEFINE_MDNODE_GET( | DEFINE_MDNODE_GET( | ||||
DICompositeType, | DICompositeType, | ||||
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line, | (unsigned Tag, MDString *Name, Metadata *File, unsigned Line, | ||||
Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, | Metadata *Scope, Metadata *BaseType, uint64_t SizeInBits, | ||||
uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | uint32_t AlignInBits, uint64_t OffsetInBits, DIFlags Flags, | ||||
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, | Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder, | ||||
Metadata *TemplateParams = nullptr, MDString *Identifier = nullptr, | Metadata *TemplateParams = nullptr, MDString *Identifier = nullptr, | ||||
Metadata *Discriminator = nullptr, Metadata *DataLocation = nullptr, | Metadata *Discriminator = nullptr, Metadata *DataLocation = nullptr, | ||||
Metadata *Associated = nullptr, Metadata *Allocated = nullptr), | Metadata *Associated = nullptr, Metadata *Allocated = nullptr, | ||||
Metadata *Rank = nullptr), | |||||
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, | (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits, | ||||
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams, | OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams, | ||||
Identifier, Discriminator, DataLocation, Associated, Allocated)) | Identifier, Discriminator, DataLocation, Associated, Allocated, Rank)) | ||||
TempDICompositeType clone() const { return cloneImpl(); } | TempDICompositeType clone() const { return cloneImpl(); } | ||||
/// Get a DICompositeType with the given ODR identifier. | /// Get a DICompositeType with the given ODR identifier. | ||||
/// | /// | ||||
/// If \a LLVMContext::isODRUniquingDebugTypes(), gets the mapped | /// If \a LLVMContext::isODRUniquingDebugTypes(), gets the mapped | ||||
/// DICompositeType for the given ODR \c Identifier. If none exists, creates | /// DICompositeType for the given ODR \c Identifier. If none exists, creates | ||||
/// a new node. | /// a new node. | ||||
/// | /// | ||||
/// Else, returns \c nullptr. | /// Else, returns \c nullptr. | ||||
static DICompositeType * | static DICompositeType * | ||||
getODRType(LLVMContext &Context, MDString &Identifier, unsigned Tag, | getODRType(LLVMContext &Context, MDString &Identifier, unsigned Tag, | ||||
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, | MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, | ||||
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, | Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, | ||||
uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements, | uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements, | ||||
unsigned RuntimeLang, Metadata *VTableHolder, | unsigned RuntimeLang, Metadata *VTableHolder, | ||||
Metadata *TemplateParams, Metadata *Discriminator, | Metadata *TemplateParams, Metadata *Discriminator, | ||||
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated); | Metadata *DataLocation, Metadata *Associated, Metadata *Allocated, | ||||
Metadata *Rank); | |||||
static DICompositeType *getODRTypeIfExists(LLVMContext &Context, | static DICompositeType *getODRTypeIfExists(LLVMContext &Context, | ||||
MDString &Identifier); | MDString &Identifier); | ||||
/// Build a DICompositeType with the given ODR identifier. | /// Build a DICompositeType with the given ODR identifier. | ||||
/// | /// | ||||
/// Looks up the mapped DICompositeType for the given ODR \c Identifier. If | /// Looks up the mapped DICompositeType for the given ODR \c Identifier. If | ||||
/// it doesn't exist, creates a new one. If it does exist and \a | /// it doesn't exist, creates a new one. If it does exist and \a | ||||
/// isForwardDecl(), and the new arguments would be a definition, mutates the | /// isForwardDecl(), and the new arguments would be a definition, mutates the | ||||
/// the type in place. In either case, returns the type. | /// the type in place. In either case, returns the type. | ||||
/// | /// | ||||
/// If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns | /// If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns | ||||
/// nullptr. | /// nullptr. | ||||
static DICompositeType *buildODRType( | static DICompositeType * | ||||
LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name, | buildODRType(LLVMContext &Context, MDString &Identifier, unsigned Tag, | ||||
Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType, | MDString *Name, Metadata *File, unsigned Line, Metadata *Scope, | ||||
uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits, | Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits, | ||||
DIFlags Flags, Metadata *Elements, unsigned RuntimeLang, | uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements, | ||||
Metadata *VTableHolder, Metadata *TemplateParams, Metadata *Discriminator, | unsigned RuntimeLang, Metadata *VTableHolder, | ||||
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated); | Metadata *TemplateParams, Metadata *Discriminator, | ||||
Metadata *DataLocation, Metadata *Associated, | |||||
Metadata *Allocated, Metadata *Rank); | |||||
DIType *getBaseType() const { return cast_or_null<DIType>(getRawBaseType()); } | DIType *getBaseType() const { return cast_or_null<DIType>(getRawBaseType()); } | ||||
DINodeArray getElements() const { | DINodeArray getElements() const { | ||||
return cast_or_null<MDTuple>(getRawElements()); | return cast_or_null<MDTuple>(getRawElements()); | ||||
} | } | ||||
DIType *getVTableHolder() const { | DIType *getVTableHolder() const { | ||||
return cast_or_null<DIType>(getRawVTableHolder()); | return cast_or_null<DIType>(getRawVTableHolder()); | ||||
} | } | ||||
Show All 26 Lines | public: | ||||
} | } | ||||
Metadata *getRawAllocated() const { return getOperand(11); } | Metadata *getRawAllocated() const { return getOperand(11); } | ||||
DIVariable *getAllocated() const { | DIVariable *getAllocated() const { | ||||
return dyn_cast_or_null<DIVariable>(getRawAllocated()); | return dyn_cast_or_null<DIVariable>(getRawAllocated()); | ||||
} | } | ||||
DIExpression *getAllocatedExp() const { | DIExpression *getAllocatedExp() const { | ||||
return dyn_cast_or_null<DIExpression>(getRawAllocated()); | return dyn_cast_or_null<DIExpression>(getRawAllocated()); | ||||
} | } | ||||
Metadata *getRawRank() const { return getOperand(12); } | |||||
ConstantInt *getRankConst() const { | |||||
if (auto *MD = dyn_cast_or_null<ConstantAsMetadata>(getRawRank())) | |||||
return dyn_cast_or_null<ConstantInt>(MD->getValue()); | |||||
return nullptr; | |||||
} | |||||
DIExpression *getRankExp() const { | |||||
return dyn_cast_or_null<DIExpression>(getRawRank()); | |||||
} | |||||
/// Replace operands. | /// Replace operands. | ||||
/// | /// | ||||
/// If this \a isUniqued() and not \a isResolved(), on a uniquing collision | /// If this \a isUniqued() and not \a isResolved(), on a uniquing collision | ||||
/// this will be RAUW'ed and deleted. Use a \a TrackingMDRef to keep track | /// this will be RAUW'ed and deleted. Use a \a TrackingMDRef to keep track | ||||
/// of its movement if necessary. | /// of its movement if necessary. | ||||
/// @{ | /// @{ | ||||
void replaceElements(DINodeArray Elements) { | void replaceElements(DINodeArray Elements) { | ||||
▲ Show 20 Lines • Show All 2,352 Lines • Show Last 20 Lines |