diff --git a/tools/build_segment.cc b/tools/build_segment.cc index d160f055..ab6c41ed 100644 --- a/tools/build_segment.cc +++ b/tools/build_segment.cc @@ -874,10 +874,26 @@ void BinningProblem::placeHighRoutines(DualStream &logOutput) while (!floatingRoutines.empty()) { - // Try to find any high routine + // Find the largest high routine - auto iterRoutine = floatingRoutines.begin(); - while (iterRoutine != floatingRoutines.end() && !(*iterRoutine)->high) iterRoutine++; + auto iterRoutine = floatingRoutines.end(); + + for (auto iter = floatingRoutines.begin(); iter < floatingRoutines.end(); iter++) + { + if (!(*iter)->high) continue; + + if (iterRoutine == floatingRoutines.end() || + (*iterRoutine)->codeLength < (*iter)->codeLength) + { + iterRoutine = iter; + continue; + } + + if ((*iterRoutine)->codeLength < (*iter)->codeLength) + { + iterRoutine = iter; + } + } if (iterRoutine == floatingRoutines.end()) break;