- // Compute the recursive split points chain size
- int level = -1;
- for (SplitPoint* spp = Threads[i]->activeSplitPoint; spp; spp = spp->parentSplitPoint)
+ assert(this != Threads[i]);
+ assert(!(this_sp && this_sp->slavesMask.none()));
+ assert(Threads.size() > 2);
+
+ // Prefer to join to SP with few parents to reduce the probability
+ // that a cut-off occurs above us, and hence we waste our work.
+ int level = 0;
+ for (SplitPoint* p = Threads[i]->activeSplitPoint; p; p = p->parentSplitPoint)