@@ -85,6 +85,7 @@ void FuncBranchData::appendFrom(const FuncBranchData &FBD, uint64_t Offset) {
8585 }
8686 llvm::stable_sort (Data);
8787 ExecutionCount += FBD.ExecutionCount ;
88+ ExternEntryCount += FBD.ExternEntryCount ;
8889 for (auto I = FBD.EntryData .begin (), E = FBD.EntryData .end (); I != E; ++I) {
8990 assert (I->To .Name == FBD.Name );
9091 auto NewElmt = EntryData.insert (EntryData.end (), *I);
@@ -269,6 +270,7 @@ Error DataReader::preprocessProfile(BinaryContext &BC) {
269270 if (FuncBranchData *FuncData = getBranchDataForNames (Function.getNames ())) {
270271 setBranchData (Function, FuncData);
271272 Function.ExecutionCount = FuncData->ExecutionCount ;
273+ Function.ExternEntryCount = FuncData->ExternEntryCount ;
272274 FuncData->Used = true ;
273275 }
274276 }
@@ -419,6 +421,7 @@ void DataReader::matchProfileData(BinaryFunction &BF) {
419421 if (fetchProfileForOtherEntryPoints (BF)) {
420422 BF.ProfileMatchRatio = evaluateProfileData (BF, *FBD);
421423 BF.ExecutionCount = FBD->ExecutionCount ;
424+ BF.ExternEntryCount = FBD->ExternEntryCount ;
422425 BF.RawSampleCount = FBD->getNumExecutedBranches ();
423426 }
424427 return ;
@@ -449,6 +452,7 @@ void DataReader::matchProfileData(BinaryFunction &BF) {
449452 setBranchData (BF, NewBranchData);
450453 NewBranchData->Used = true ;
451454 BF.ExecutionCount = NewBranchData->ExecutionCount ;
455+ BF.ExternEntryCount = NewBranchData->ExternEntryCount ;
452456 BF.ProfileMatchRatio = 1 .0f ;
453457 break ;
454458 }
@@ -1190,6 +1194,8 @@ std::error_code DataReader::parse() {
11901194 if (BI.To .IsSymbol && BI.To .Offset == 0 ) {
11911195 I = GetOrCreateFuncEntry (BI.To .Name );
11921196 I->second .ExecutionCount += BI.Branches ;
1197+ if (!BI.From .IsSymbol )
1198+ I->second .ExternEntryCount += BI.Branches ;
11931199 }
11941200 }
11951201
0 commit comments