@@ -833,6 +833,7 @@ struct BBAddrMap {
833833 bool MultiBBRange : 1 ;
834834 bool OmitBBEntries : 1 ;
835835 bool CallsiteEndOffsets : 1 ;
836+ bool BBHash : 1 ;
836837
837838 bool hasPGOAnalysis () const { return FuncEntryCount || BBFreq || BrProb; }
838839
@@ -845,7 +846,8 @@ struct BBAddrMap {
845846 (static_cast <uint8_t >(BrProb) << 2 ) |
846847 (static_cast <uint8_t >(MultiBBRange) << 3 ) |
847848 (static_cast <uint8_t >(OmitBBEntries) << 4 ) |
848- (static_cast <uint8_t >(CallsiteEndOffsets) << 5 );
849+ (static_cast <uint8_t >(CallsiteEndOffsets) << 5 ) |
850+ (static_cast <uint8_t >(BBHash) << 6 );
849851 }
850852
851853 // Decodes from minimum bit width representation and validates no
@@ -854,7 +856,8 @@ struct BBAddrMap {
854856 Features Feat{
855857 static_cast <bool >(Val & (1 << 0 )), static_cast <bool >(Val & (1 << 1 )),
856858 static_cast <bool >(Val & (1 << 2 )), static_cast <bool >(Val & (1 << 3 )),
857- static_cast <bool >(Val & (1 << 4 )), static_cast <bool >(Val & (1 << 5 ))};
859+ static_cast <bool >(Val & (1 << 4 )), static_cast <bool >(Val & (1 << 5 )),
860+ static_cast <bool >(Val & (1 << 6 ))};
858861 if (Feat.encode () != Val)
859862 return createStringError (
860863 std::error_code (), " invalid encoding for BBAddrMap::Features: 0x%x" ,
@@ -864,10 +867,10 @@ struct BBAddrMap {
864867
865868 bool operator ==(const Features &Other) const {
866869 return std::tie (FuncEntryCount, BBFreq, BrProb, MultiBBRange,
867- OmitBBEntries, CallsiteEndOffsets) ==
870+ OmitBBEntries, CallsiteEndOffsets, BBHash ) ==
868871 std::tie (Other.FuncEntryCount , Other.BBFreq , Other.BrProb ,
869872 Other.MultiBBRange , Other.OmitBBEntries ,
870- Other.CallsiteEndOffsets );
873+ Other.CallsiteEndOffsets , Other. BBHash );
871874 }
872875 };
873876
@@ -920,17 +923,19 @@ struct BBAddrMap {
920923 false }; // Metdata for this basic block.
921924 // Offsets of end of call instructions, relative to the basic block start.
922925 SmallVector<uint32_t , 1 > CallsiteEndOffsets;
926+ uint64_t Hash = 0 ; // Hash for this basic block.
923927
924928 BBEntry (uint32_t ID, uint32_t Offset, uint32_t Size, Metadata MD,
925- SmallVector<uint32_t , 1 > CallsiteEndOffsets)
929+ SmallVector<uint32_t , 1 > CallsiteEndOffsets, uint64_t Hash )
926930 : ID(ID), Offset(Offset), Size(Size), MD(MD),
927- CallsiteEndOffsets (std::move(CallsiteEndOffsets)) {}
931+ CallsiteEndOffsets (std::move(CallsiteEndOffsets)), Hash(Hash) {}
928932
929933 UniqueBBID getID () const { return {ID, 0 }; }
930934
931935 bool operator ==(const BBEntry &Other) const {
932936 return ID == Other.ID && Offset == Other.Offset && Size == Other.Size &&
933- MD == Other.MD && CallsiteEndOffsets == Other.CallsiteEndOffsets ;
937+ MD == Other.MD && CallsiteEndOffsets == Other.CallsiteEndOffsets &&
938+ Hash == Other.Hash ;
934939 }
935940
936941 bool hasReturn () const { return MD.HasReturn ; }
0 commit comments