]> git.sesse.net Git - stockfish/blobdiff - src/tt.cpp
Remove pointless tte->static_value() != VALUE_NONE checks
[stockfish] / src / tt.cpp
index 5c5e10c16b720115ca4b20fabb9c97dbd21ffd99..d2f983c9f014cba76d250092a8f0e9f06c60dc04 100644 (file)
@@ -25,6 +25,7 @@
 #include <cassert>
 #include <cstring>
 
+#include "evaluate.h"
 #include "movegen.h"
 #include "tt.h"
 
@@ -164,23 +165,28 @@ void TranspositionTable::new_search() {
 void TranspositionTable::insert_pv(const Position& pos, Move pv[]) {
 
   StateInfo st;
+  EvalInfo ei;
+  Value v;
   Position p(pos, pos.thread());
 
   for (int i = 0; pv[i] != MOVE_NONE; i++)
   {
       TTEntry *tte = retrieve(p.get_key());
       if (!tte || tte->move() != pv[i])
-          store(p.get_key(), VALUE_NONE, VALUE_TYPE_NONE, Depth(-127*OnePly), pv[i], VALUE_NONE, VALUE_NONE);
+      {
+          v = (p.is_check() ? VALUE_NONE : evaluate(p, ei));
+          store(p.get_key(), VALUE_NONE, VALUE_TYPE_NONE, Depth(-127*OnePly), pv[i], v, ei.kingDanger[pos.side_to_move()]);
+      }
       p.do_move(pv[i], st);
   }
 }
 
 
-/// TranspositionTable::extract_pv() extends a PV by adding moves from the
-/// transposition table at the end. This should ensure that the PV is almost
-/// always at least two plies long, which is important, because otherwise we
-/// will often get single-move PVs when the search stops while failing high,
-/// and a single-move PV means that we don't have a ponder move.
+/// TranspositionTable::extract_pv() builds a PV by adding moves from the
+/// transposition table. We consider also failing high nodes and not only
+/// VALUE_TYPE_EXACT nodes. This allow to always have a ponder move even
+/// when we fail high at root and also a long PV to print that is important
+/// for position analysis.
 
 void TranspositionTable::extract_pv(const Position& pos, Move bestMove, Move pv[], const int PLY_MAX) {
 
@@ -194,11 +200,8 @@ void TranspositionTable::extract_pv(const Position& pos, Move bestMove, Move pv[
   pv[ply] = bestMove;
   p.do_move(pv[ply++], st);
 
-  // Extract moves from TT when possible. We try hard to always
-  // get a ponder move, that's the reason of ply < 2 conditions.
   while (   (tte = retrieve(p.get_key())) != NULL
          && tte->move() != MOVE_NONE
-         && (tte->type() == VALUE_TYPE_EXACT || ply < 2)
          && move_is_legal(p, tte->move())
          && (!p.is_draw() || ply < 2)
          && ply < PLY_MAX)