@@ -759,18 +759,18 @@ class MDString : public Metadata {
759759// / memory access used by the alias-analysis infrastructure.
760760struct AAMDNodes {
761761 explicit AAMDNodes () = default;
762- explicit AAMDNodes (MDNode *T, MDNode *TS, MDNode *S, MDNode *N)
763- : TBAA(T), TBAAStruct(TS), Scope(S), NoAlias(N) {}
762+ explicit AAMDNodes (MDNode *T, MDNode *TS, MDNode *S, MDNode *N, MDNode *NAS )
763+ : TBAA(T), TBAAStruct(TS), Scope(S), NoAlias(N), NoAliasAddrSpace(NAS) {}
764764
765765 bool operator ==(const AAMDNodes &A) const {
766766 return TBAA == A.TBAA && TBAAStruct == A.TBAAStruct && Scope == A.Scope &&
767- NoAlias == A.NoAlias ;
767+ NoAlias == A.NoAlias && NoAliasAddrSpace == A. NoAliasAddrSpace ;
768768 }
769769
770770 bool operator !=(const AAMDNodes &A) const { return !(*this == A); }
771771
772772 explicit operator bool () const {
773- return TBAA || TBAAStruct || Scope || NoAlias;
773+ return TBAA || TBAAStruct || Scope || NoAlias || NoAliasAddrSpace ;
774774 }
775775
776776 // / The tag for type-based alias analysis.
@@ -785,6 +785,9 @@ struct AAMDNodes {
785785 // / The tag specifying the noalias scope.
786786 MDNode *NoAlias = nullptr ;
787787
788+ // / The tag specifying the noalias address spaces.
789+ MDNode *NoAliasAddrSpace = nullptr ;
790+
788791 // Shift tbaa Metadata node to start off bytes later
789792 LLVM_ABI static MDNode *shiftTBAA (MDNode *M, size_t off);
790793
@@ -806,6 +809,8 @@ struct AAMDNodes {
806809 Result.TBAAStruct = Other.TBAAStruct == TBAAStruct ? TBAAStruct : nullptr ;
807810 Result.Scope = Other.Scope == Scope ? Scope : nullptr ;
808811 Result.NoAlias = Other.NoAlias == NoAlias ? NoAlias : nullptr ;
812+ Result.NoAliasAddrSpace =
813+ Other.NoAliasAddrSpace == NoAliasAddrSpace ? NoAliasAddrSpace : nullptr ;
809814 return Result;
810815 }
811816
@@ -818,6 +823,7 @@ struct AAMDNodes {
818823 TBAAStruct ? shiftTBAAStruct (TBAAStruct, Offset) : nullptr ;
819824 Result.Scope = Scope;
820825 Result.NoAlias = NoAlias;
826+ Result.NoAliasAddrSpace = NoAliasAddrSpace;
821827 return Result;
822828 }
823829
@@ -833,6 +839,7 @@ struct AAMDNodes {
833839 Result.TBAAStruct = TBAAStruct;
834840 Result.Scope = Scope;
835841 Result.NoAlias = NoAlias;
842+ Result.NoAliasAddrSpace = NoAliasAddrSpace;
836843 return Result;
837844 }
838845
@@ -860,20 +867,21 @@ struct AAMDNodes {
860867template <>
861868struct DenseMapInfo <AAMDNodes> {
862869 static inline AAMDNodes getEmptyKey () {
863- return AAMDNodes (DenseMapInfo<MDNode *>::getEmptyKey (),
864- nullptr , nullptr , nullptr );
870+ return AAMDNodes (DenseMapInfo<MDNode *>::getEmptyKey (), nullptr , nullptr ,
871+ nullptr , nullptr );
865872 }
866873
867874 static inline AAMDNodes getTombstoneKey () {
868- return AAMDNodes (DenseMapInfo<MDNode *>::getTombstoneKey (),
875+ return AAMDNodes (DenseMapInfo<MDNode *>::getTombstoneKey (), nullptr ,
869876 nullptr , nullptr , nullptr );
870877 }
871878
872879 static unsigned getHashValue (const AAMDNodes &Val) {
873880 return DenseMapInfo<MDNode *>::getHashValue (Val.TBAA ) ^
874881 DenseMapInfo<MDNode *>::getHashValue (Val.TBAAStruct ) ^
875882 DenseMapInfo<MDNode *>::getHashValue (Val.Scope ) ^
876- DenseMapInfo<MDNode *>::getHashValue (Val.NoAlias );
883+ DenseMapInfo<MDNode *>::getHashValue (Val.NoAlias ) ^
884+ DenseMapInfo<MDNode *>::getHashValue (Val.NoAliasAddrSpace );
877885 }
878886
879887 static bool isEqual (const AAMDNodes &LHS, const AAMDNodes &RHS) {
0 commit comments