diff --git a/bolt/include/bolt/Core/BinaryFunction.h b/bolt/include/bolt/Core/BinaryFunction.h --- a/bolt/include/bolt/Core/BinaryFunction.h +++ b/bolt/include/bolt/Core/BinaryFunction.h @@ -710,8 +710,6 @@ void releaseCFG() { for (BinaryBasicBlock *BB : BasicBlocks) BB->releaseCFG(); - for (BinaryBasicBlock *BB : DeletedBasicBlocks) - BB->releaseCFG(); clearList(CallSites); clearList(ColdCallSites); diff --git a/bolt/lib/Core/BinaryFunction.cpp b/bolt/lib/Core/BinaryFunction.cpp --- a/bolt/lib/Core/BinaryFunction.cpp +++ b/bolt/lib/Core/BinaryFunction.cpp @@ -348,7 +348,10 @@ } else { assert(!isEntryPoint(*BB) && "all entry blocks must be valid"); ++Count; - Bytes += BC.computeCodeSize(BB->begin(), BB->end()); + if (BB->size()) { + std::unique_lock Lock(BC.CtxMutex); + Bytes += BB->estimateSize(); + } } } BasicBlocksLayout = std::move(NewLayout); @@ -372,6 +375,9 @@ if (Count > 0) recomputeLandingPads(); + for (BinaryBasicBlock *BB : DeletedBasicBlocks) + BB->releaseCFG(); + return std::make_pair(Count, Bytes); }