    // Estimate the overall runtime cost using the scheduling policy   const unsigned TotalCost = estimateTotalCost(BC, SkipPredicate, SchedPolicy);   const unsigned BlocksCount = TasksPerThread * opts::ThreadCount;   const unsigned BlockCost =       TotalCost > BlocksCount ? TotalCost / BlocksCount : 0;    // Divide work into blocks of equal cost   ThreadPool &Pool = getThreadPool();   auto BlockBegin = BC.getBinaryFunctions().begin();   unsigned CurrentCost = 0;    for (auto It = BC.getBinaryFunctions().begin();        It != BC.getBinaryFunctions().end(); ++It) {     auto &BF = It->second;     CurrentCost += computeCostFor(BF, SkipPredicate, SchedPolicy);      if (CurrentCost >= BlockCost) {       Pool.async(runBlock, BlockBegin, std::next(It)