@@ -1026,14 +1026,14 @@ class DICompositeType : public DIType {
10261026 DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
10271027 DITemplateParameterArray TemplateParams, StringRef Identifier,
10281028 DIDerivedType *Discriminator, Metadata *DataLocation,
1029- Metadata *Associated, Metadata *Allocated, StorageType Storage ,
1030- bool ShouldCreate = true ) {
1031- return getImpl (Context, Tag, getCanonicalMDString (Context, Name), File,
1032- Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits ,
1033- Flags, Elements.get (), RuntimeLang, VTableHolder ,
1034- TemplateParams.get (),
1035- getCanonicalMDString (Context, Identifier), Discriminator,
1036- DataLocation, Associated, Allocated, Storage, ShouldCreate);
1029+ Metadata *Associated, Metadata *Allocated, Metadata *Rank ,
1030+ StorageType Storage, bool ShouldCreate = true ) {
1031+ return getImpl (
1032+ Context, Tag, getCanonicalMDString (Context, Name), File, Line, Scope ,
1033+ BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get (),
1034+ RuntimeLang, VTableHolder, TemplateParams.get (),
1035+ getCanonicalMDString (Context, Identifier), Discriminator, DataLocation ,
1036+ Associated, Allocated, Rank , Storage, ShouldCreate);
10371037 }
10381038 static DICompositeType *
10391039 getImpl (LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1042,16 +1042,17 @@ class DICompositeType : public DIType {
10421042 DIFlags Flags, Metadata *Elements, unsigned RuntimeLang,
10431043 Metadata *VTableHolder, Metadata *TemplateParams,
10441044 MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
1045- Metadata *Associated, Metadata *Allocated, StorageType Storage ,
1046- bool ShouldCreate = true );
1045+ Metadata *Associated, Metadata *Allocated, Metadata *Rank ,
1046+ StorageType Storage, bool ShouldCreate = true );
10471047
10481048 TempDICompositeType cloneImpl () const {
1049- return getTemporary (
1050- getContext (), getTag (), getName (), getFile (), getLine (), getScope (),
1051- getBaseType (), getSizeInBits (), getAlignInBits (), getOffsetInBits (),
1052- getFlags (), getElements (), getRuntimeLang (), getVTableHolder (),
1053- getTemplateParams (), getIdentifier (), getDiscriminator (),
1054- getRawDataLocation (), getRawAssociated (), getRawAllocated ());
1049+ return getTemporary (getContext (), getTag (), getName (), getFile (), getLine (),
1050+ getScope (), getBaseType (), getSizeInBits (),
1051+ getAlignInBits (), getOffsetInBits (), getFlags (),
1052+ getElements (), getRuntimeLang (), getVTableHolder (),
1053+ getTemplateParams (), getIdentifier (),
1054+ getDiscriminator (), getRawDataLocation (),
1055+ getRawAssociated (), getRawAllocated (), getRawRank ());
10551056 }
10561057
10571058public:
@@ -1064,10 +1065,10 @@ class DICompositeType : public DIType {
10641065 DITemplateParameterArray TemplateParams = nullptr ,
10651066 StringRef Identifier = " " , DIDerivedType *Discriminator = nullptr ,
10661067 Metadata *DataLocation = nullptr , Metadata *Associated = nullptr ,
1067- Metadata *Allocated = nullptr ),
1068+ Metadata *Allocated = nullptr , Metadata *Rank = nullptr ),
10681069 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
10691070 OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1070- Identifier, Discriminator, DataLocation, Associated, Allocated))
1071+ Identifier, Discriminator, DataLocation, Associated, Allocated, Rank ))
10711072 DEFINE_MDNODE_GET(
10721073 DICompositeType,
10731074 (unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1076,10 +1077,11 @@ class DICompositeType : public DIType {
10761077 Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
10771078 Metadata *TemplateParams = nullptr , MDString *Identifier = nullptr ,
10781079 Metadata *Discriminator = nullptr , Metadata *DataLocation = nullptr ,
1079- Metadata *Associated = nullptr , Metadata *Allocated = nullptr ),
1080+ Metadata *Associated = nullptr , Metadata *Allocated = nullptr ,
1081+ Metadata *Rank = nullptr ),
10801082 (Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
10811083 OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
1082- Identifier, Discriminator, DataLocation, Associated, Allocated))
1084+ Identifier, Discriminator, DataLocation, Associated, Allocated, Rank ))
10831085
10841086 TempDICompositeType clone() const { return cloneImpl (); }
10851087
@@ -1097,7 +1099,8 @@ class DICompositeType : public DIType {
10971099 uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements,
10981100 unsigned RuntimeLang, Metadata *VTableHolder,
10991101 Metadata *TemplateParams, Metadata *Discriminator,
1100- Metadata *DataLocation, Metadata *Associated, Metadata *Allocated);
1102+ Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
1103+ Metadata *Rank);
11011104 static DICompositeType *getODRTypeIfExists (LLVMContext &Context,
11021105 MDString &Identifier);
11031106
@@ -1110,13 +1113,15 @@ class DICompositeType : public DIType {
11101113 // /
11111114 // / If not \a LLVMContext::isODRUniquingDebugTypes(), this function returns
11121115 // / nullptr.
1113- static DICompositeType *buildODRType (
1114- LLVMContext &Context, MDString &Identifier, unsigned Tag, MDString *Name,
1115- Metadata *File, unsigned Line, Metadata *Scope, Metadata *BaseType,
1116- uint64_t SizeInBits, uint32_t AlignInBits, uint64_t OffsetInBits,
1117- DIFlags Flags, Metadata *Elements, unsigned RuntimeLang,
1118- Metadata *VTableHolder, Metadata *TemplateParams, Metadata *Discriminator,
1119- Metadata *DataLocation, Metadata *Associated, Metadata *Allocated);
1116+ static DICompositeType *
1117+ buildODRType (LLVMContext &Context, MDString &Identifier, unsigned Tag,
1118+ MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
1119+ Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
1120+ uint64_t OffsetInBits, DIFlags Flags, Metadata *Elements,
1121+ unsigned RuntimeLang, Metadata *VTableHolder,
1122+ Metadata *TemplateParams, Metadata *Discriminator,
1123+ Metadata *DataLocation, Metadata *Associated,
1124+ Metadata *Allocated, Metadata *Rank);
11201125
11211126 DIType *getBaseType () const { return cast_or_null<DIType>(getRawBaseType ()); }
11221127 DINodeArray getElements () const {
@@ -1159,6 +1164,15 @@ class DICompositeType : public DIType {
11591164 DIExpression *getAllocatedExp () const {
11601165 return dyn_cast_or_null<DIExpression>(getRawAllocated ());
11611166 }
1167+ Metadata *getRawRank () const { return getOperand (12 ); }
1168+ ConstantInt *getRankConst () const {
1169+ if (auto *MD = dyn_cast_or_null<ConstantAsMetadata>(getRawRank ()))
1170+ return dyn_cast_or_null<ConstantInt>(MD->getValue ());
1171+ return nullptr ;
1172+ }
1173+ DIExpression *getRankExp () const {
1174+ return dyn_cast_or_null<DIExpression>(getRawRank ());
1175+ }
11621176
11631177 // / Replace operands.
11641178 // /
0 commit comments