@@ -67,7 +67,20 @@ calcTSPScore(const std::vector<BinaryFunction *> &BinaryFunctions,
6767 for (BinaryBasicBlock *DstBB : SrcBB->successors ()) {
6868 if (SrcBB != DstBB && BI->Count != BinaryBasicBlock::COUNT_NO_PROFILE) {
6969 JumpCount += BI->Count ;
70- if (BBAddr.at (SrcBB) + BBSize.at (SrcBB) == BBAddr.at (DstBB))
70+
71+ auto BBAddrIt = BBAddr.find (SrcBB);
72+ assert (BBAddrIt != BBAddr.end ());
73+ uint64_t SrcBBAddr = BBAddrIt->second ;
74+
75+ auto BBSizeIt = BBSize.find (SrcBB);
76+ assert (BBSizeIt != BBSize.end ());
77+ uint64_t SrcBBSize = BBSizeIt->second ;
78+
79+ BBAddrIt = BBAddr.find (DstBB);
80+ assert (BBAddrIt != BBAddr.end ());
81+ uint64_t DstBBAddr = BBAddrIt->second ;
82+
83+ if (SrcBBAddr + SrcBBSize == DstBBAddr)
7184 Score += BI->Count ;
7285 }
7386 ++BI;
@@ -149,29 +162,39 @@ double expectedCacheHitRatio(
149162 for (BinaryFunction *BF : BinaryFunctions) {
150163 if (BF->getLayout ().block_empty ())
151164 continue ;
152- const uint64_t Page =
153- BBAddr.at (BF->getLayout ().block_front ()) / ITLBPageSize;
154- PageSamples[Page] += FunctionSamples.at (BF);
165+ auto BBAddrIt = BBAddr.find (BF->getLayout ().block_front ());
166+ assert (BBAddrIt != BBAddr.end ());
167+ const uint64_t Page = BBAddrIt->second / ITLBPageSize;
168+
169+ auto FunctionSamplesIt = FunctionSamples.find (BF);
170+ assert (FunctionSamplesIt != FunctionSamples.end ());
171+ PageSamples[Page] += FunctionSamplesIt->second ;
155172 }
156173
157174 // Computing the expected number of misses for every function
158175 double Misses = 0 ;
159176 for (BinaryFunction *BF : BinaryFunctions) {
160177 // Skip the function if it has no samples
161- if (BF->getLayout ().block_empty () || FunctionSamples.at (BF) == 0.0 )
178+ auto FunctionSamplesIt = FunctionSamples.find (BF);
179+ assert (FunctionSamplesIt != FunctionSamples.end ());
180+ double Samples = FunctionSamplesIt->second ;
181+ if (BF->getLayout ().block_empty () || Samples == 0.0 )
162182 continue ;
163- double Samples = FunctionSamples.at (BF);
164- const uint64_t Page =
165- BBAddr.at (BF->getLayout ().block_front ()) / ITLBPageSize;
183+
184+ auto BBAddrIt = BBAddr.find (BF->getLayout ().block_front ());
185+ assert (BBAddrIt != BBAddr.end ());
186+ const uint64_t Page = BBAddrIt->second / ITLBPageSize;
166187 // The probability that the page is not present in the cache
167188 const double MissProb =
168189 pow (1.0 - PageSamples[Page] / TotalSamples, ITLBEntries);
169190
170191 // Processing all callers of the function
171192 for (std::pair<BinaryFunction *, uint64_t > Pair : Calls[BF]) {
172193 BinaryFunction *SrcFunction = Pair.first ;
173- const uint64_t SrcPage =
174- BBAddr.at (SrcFunction->getLayout ().block_front ()) / ITLBPageSize;
194+
195+ BBAddrIt = BBAddr.find (SrcFunction->getLayout ().block_front ());
196+ assert (BBAddrIt != BBAddr.end ());
197+ const uint64_t SrcPage = BBAddrIt->second / ITLBPageSize;
175198 // Is this a 'long' or a 'short' call?
176199 if (Page != SrcPage) {
177200 // This is a miss
0 commit comments