@@ -833,6 +833,7 @@ struct BBAddrMap {
833
833
bool MultiBBRange : 1 ;
834
834
bool OmitBBEntries : 1 ;
835
835
bool CallsiteEndOffsets : 1 ;
836
+ bool BBHash : 1 ;
836
837
837
838
bool hasPGOAnalysis () const { return FuncEntryCount || BBFreq || BrProb; }
838
839
@@ -845,7 +846,8 @@ struct BBAddrMap {
845
846
(static_cast <uint8_t >(BrProb) << 2 ) |
846
847
(static_cast <uint8_t >(MultiBBRange) << 3 ) |
847
848
(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 );
849
851
}
850
852
851
853
// Decodes from minimum bit width representation and validates no
@@ -854,7 +856,8 @@ struct BBAddrMap {
854
856
Features Feat{
855
857
static_cast <bool >(Val & (1 << 0 )), static_cast <bool >(Val & (1 << 1 )),
856
858
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 ))};
858
861
if (Feat.encode () != Val)
859
862
return createStringError (
860
863
std::error_code (), " invalid encoding for BBAddrMap::Features: 0x%x" ,
@@ -864,10 +867,10 @@ struct BBAddrMap {
864
867
865
868
bool operator ==(const Features &Other) const {
866
869
return std::tie (FuncEntryCount, BBFreq, BrProb, MultiBBRange,
867
- OmitBBEntries, CallsiteEndOffsets) ==
870
+ OmitBBEntries, CallsiteEndOffsets, BBHash ) ==
868
871
std::tie (Other.FuncEntryCount , Other.BBFreq , Other.BrProb ,
869
872
Other.MultiBBRange , Other.OmitBBEntries ,
870
- Other.CallsiteEndOffsets );
873
+ Other.CallsiteEndOffsets , Other. BBHash );
871
874
}
872
875
};
873
876
@@ -920,17 +923,19 @@ struct BBAddrMap {
920
923
false }; // Metdata for this basic block.
921
924
// Offsets of end of call instructions, relative to the basic block start.
922
925
SmallVector<uint32_t , 1 > CallsiteEndOffsets;
926
+ uint64_t Hash = 0 ; // Hash for this basic block.
923
927
924
928
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 )
926
930
: ID(ID), Offset(Offset), Size(Size), MD(MD),
927
- CallsiteEndOffsets (std::move(CallsiteEndOffsets)) {}
931
+ CallsiteEndOffsets (std::move(CallsiteEndOffsets)), Hash(Hash) {}
928
932
929
933
UniqueBBID getID () const { return {ID, 0 }; }
930
934
931
935
bool operator ==(const BBEntry &Other) const {
932
936
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 ;
934
939
}
935
940
936
941
bool hasReturn () const { return MD.HasReturn ; }
0 commit comments