@@ -759,18 +759,18 @@ class MDString : public Metadata {
759
759
// / memory access used by the alias-analysis infrastructure.
760
760
struct AAMDNodes {
761
761
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) {}
764
764
765
765
bool operator ==(const AAMDNodes &A) const {
766
766
return TBAA == A.TBAA && TBAAStruct == A.TBAAStruct && Scope == A.Scope &&
767
- NoAlias == A.NoAlias ;
767
+ NoAlias == A.NoAlias && NoAliasAddrSpace == A. NoAliasAddrSpace ;
768
768
}
769
769
770
770
bool operator !=(const AAMDNodes &A) const { return !(*this == A); }
771
771
772
772
explicit operator bool () const {
773
- return TBAA || TBAAStruct || Scope || NoAlias;
773
+ return TBAA || TBAAStruct || Scope || NoAlias || NoAliasAddrSpace ;
774
774
}
775
775
776
776
// / The tag for type-based alias analysis.
@@ -785,6 +785,9 @@ struct AAMDNodes {
785
785
// / The tag specifying the noalias scope.
786
786
MDNode *NoAlias = nullptr ;
787
787
788
+ // / The tag specifying the noalias address spaces.
789
+ MDNode *NoAliasAddrSpace = nullptr ;
790
+
788
791
// Shift tbaa Metadata node to start off bytes later
789
792
LLVM_ABI static MDNode *shiftTBAA (MDNode *M, size_t off);
790
793
@@ -806,6 +809,8 @@ struct AAMDNodes {
806
809
Result.TBAAStruct = Other.TBAAStruct == TBAAStruct ? TBAAStruct : nullptr ;
807
810
Result.Scope = Other.Scope == Scope ? Scope : nullptr ;
808
811
Result.NoAlias = Other.NoAlias == NoAlias ? NoAlias : nullptr ;
812
+ Result.NoAliasAddrSpace =
813
+ Other.NoAliasAddrSpace == NoAliasAddrSpace ? NoAliasAddrSpace : nullptr ;
809
814
return Result;
810
815
}
811
816
@@ -818,6 +823,7 @@ struct AAMDNodes {
818
823
TBAAStruct ? shiftTBAAStruct (TBAAStruct, Offset) : nullptr ;
819
824
Result.Scope = Scope;
820
825
Result.NoAlias = NoAlias;
826
+ Result.NoAliasAddrSpace = NoAliasAddrSpace;
821
827
return Result;
822
828
}
823
829
@@ -833,6 +839,7 @@ struct AAMDNodes {
833
839
Result.TBAAStruct = TBAAStruct;
834
840
Result.Scope = Scope;
835
841
Result.NoAlias = NoAlias;
842
+ Result.NoAliasAddrSpace = NoAliasAddrSpace;
836
843
return Result;
837
844
}
838
845
@@ -860,20 +867,21 @@ struct AAMDNodes {
860
867
template <>
861
868
struct DenseMapInfo <AAMDNodes> {
862
869
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 );
865
872
}
866
873
867
874
static inline AAMDNodes getTombstoneKey () {
868
- return AAMDNodes (DenseMapInfo<MDNode *>::getTombstoneKey (),
875
+ return AAMDNodes (DenseMapInfo<MDNode *>::getTombstoneKey (), nullptr ,
869
876
nullptr , nullptr , nullptr );
870
877
}
871
878
872
879
static unsigned getHashValue (const AAMDNodes &Val) {
873
880
return DenseMapInfo<MDNode *>::getHashValue (Val.TBAA ) ^
874
881
DenseMapInfo<MDNode *>::getHashValue (Val.TBAAStruct ) ^
875
882
DenseMapInfo<MDNode *>::getHashValue (Val.Scope ) ^
876
- DenseMapInfo<MDNode *>::getHashValue (Val.NoAlias );
883
+ DenseMapInfo<MDNode *>::getHashValue (Val.NoAlias ) ^
884
+ DenseMapInfo<MDNode *>::getHashValue (Val.NoAliasAddrSpace );
877
885
}
878
886
879
887
static bool isEqual (const AAMDNodes &LHS, const AAMDNodes &RHS) {
0 commit comments