diff --git a/src/search.cpp b/src/search.cpp index 3617853e..434587a8 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1475,15 +1475,12 @@ namespace { Value bestValue = staticValue; if (bestValue >= beta) - { - // Update transposition table before to leave - TT.store(pos, value_to_tt(bestValue, ply), depth, MOVE_NONE, VALUE_TYPE_EXACT); - return bestValue; - } - else if (!isCheck && !tte && ei.futilityMargin == 0) { // Store the score to avoid a future costly evaluation() call - TT.store(pos, value_to_tt(bestValue, ply), Depth(-127*OnePly), MOVE_NONE, VALUE_TYPE_EVAL); + if (!isCheck && !tte && ei.futilityMargin == 0) + TT.store(pos, value_to_tt(bestValue, ply), Depth(-127*OnePly), MOVE_NONE, VALUE_TYPE_EVAL); + + return bestValue; } if (bestValue > alpha) @@ -1568,6 +1565,16 @@ namespace { assert(bestValue > -VALUE_INFINITE && bestValue < VALUE_INFINITE); + // Update transposition table + if (!pvNode) + { + Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1)); + if (bestValue < beta) + TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_UPPER); + else + TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_LOWER); + } + // Update killers only for good check moves Move m = ss[ply].currentMove; if (alpha >= beta && ok_to_history(pos, m)) // Only non capture moves are considered