goto moves_loop;
}
else if (excludedMove) {
- // excludeMove implies that we had a ttHit on the containing non-excluded search with ss->staticEval filled from TT
- // However static evals from the TT aren't good enough (-13 elo), presumably due to changing optimism context
- // Recalculate value with current optimism (without updating thread avgComplexity)
- ss->staticEval = eval = evaluate(pos, &complexity);
+ // Providing the hint that this node's accumulator will be used often brings significant Elo gain (13 elo)
+ Eval::NNUE::hint_common_parent_position(pos);
+ eval = ss->staticEval;
+ complexity = abs(ss->staticEval - pos.psq_eg_stm());
}
else if (ss->ttHit)
{
Value delta = beta - alpha;
+ Depth r = reduction(improving, depth, moveCount, delta, thisThread->rootDelta);
+
// Step 14. Pruning at shallow depth (~120 Elo). Depth conditions are important for mate finding.
if ( !rootNode
&& pos.non_pawn_material(us)
moveCountPruning = moveCount >= futility_move_count(improving, depth);
// Reduced depth of the next LMR search
- int lmrDepth = std::max(newDepth - reduction(improving, depth, moveCount, delta, thisThread->rootDelta), 0);
+ int lmrDepth = std::max(newDepth - r, 0);
if ( capture
|| givesCheck)
// Step 16. Make the move
pos.do_move(move, st, givesCheck);
- Depth r = reduction(improving, depth, moveCount, delta, thisThread->rootDelta);
-
// Decrease reduction if position is or has been on the PV
// and node is not likely to fail low. (~3 Elo)
if ( ss->ttPv