@@ -407,13 +407,6 @@ struct SILDeclRef {
407407 // / Return the expected linkage of this declaration.
408408 SILLinkage getLinkage (ForDefinition_t forDefinition) const ;
409409
410- // / Return the hash code for the SIL declaration.
411- friend llvm::hash_code hash_value (const SILDeclRef &ref) {
412- return llvm::hash_combine (
413- ref.loc .getOpaqueValue (), static_cast <int >(ref.kind ), ref.isForeign ,
414- ref.distributedThunk , ref.defaultArgIndex , ref.isAsyncLetClosure );
415- }
416-
417410 bool operator ==(SILDeclRef rhs) const {
418411 return loc.getOpaqueValue () == rhs.loc .getOpaqueValue () &&
419412 kind == rhs.kind && isForeign == rhs.isForeign &&
@@ -613,6 +606,24 @@ struct SILDeclRef {
613606
614607 bool hasAsync () const ;
615608
609+ // / Return the hash code for the SIL declaration.
610+ friend llvm::hash_code hash_value (swift::SILDeclRef ref) {
611+ return llvm::hash_combine (
612+ llvm::hash_value (ref.loc .getOpaqueValue ()),
613+ llvm::hash_value (unsigned (ref.kind )),
614+ llvm::hash_value (
615+ (ref.kind == swift::SILDeclRef::Kind::DefaultArgGenerator)
616+ ? ref.defaultArgIndex
617+ : 0 ),
618+ llvm::hash_value (ref.isForeign ),
619+ llvm::hash_value (ref.pointer .getOpaqueValue ()),
620+ llvm::hash_value (ref.distributedThunk ),
621+ llvm::hash_value (unsigned (ref.backDeploymentKind )),
622+ llvm::hash_value (ref.isKnownToBeLocal ),
623+ llvm::hash_value (ref.isRuntimeAccessible ),
624+ llvm::hash_value (ref.isAsyncLetClosure ));
625+ }
626+
616627private:
617628 friend struct llvm ::DenseMapInfo<swift::SILDeclRef>;
618629 // / Produces a SILDeclRef from an opaque value.
@@ -660,19 +671,7 @@ template<> struct DenseMapInfo<swift::SILDeclRef> {
660671 nullptr );
661672 }
662673 static unsigned getHashValue (swift::SILDeclRef Val) {
663- unsigned h1 = PointerInfo::getHashValue (Val.loc .getOpaqueValue ());
664- unsigned h2 = UnsignedInfo::getHashValue (unsigned (Val.kind ));
665- unsigned h3 = (Val.kind == Kind::DefaultArgGenerator)
666- ? UnsignedInfo::getHashValue (Val.defaultArgIndex )
667- : 0 ;
668- unsigned h4 = UnsignedInfo::getHashValue (Val.isForeign );
669- unsigned h5 = PointerInfo::getHashValue (Val.pointer .getOpaqueValue ());
670- unsigned h6 = UnsignedInfo::getHashValue (Val.distributedThunk );
671- unsigned h7 = UnsignedInfo::getHashValue (unsigned (Val.backDeploymentKind ));
672- unsigned h8 = UnsignedInfo::getHashValue (Val.isKnownToBeLocal );
673- unsigned h9 = UnsignedInfo::getHashValue (Val.isRuntimeAccessible );
674- return h1 ^ (h2 << 4 ) ^ (h3 << 9 ) ^ (h4 << 7 ) ^ (h5 << 11 ) ^ (h6 << 8 ) ^
675- (h7 << 10 ) ^ (h8 << 13 ) ^ (h9 << 15 );
674+ return hash_value (Val);
676675 }
677676 static bool isEqual (swift::SILDeclRef const &LHS,
678677 swift::SILDeclRef const &RHS) {
0 commit comments