]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Always use ss->bestMove to store ply best move
[stockfish] / src / search.cpp
index 29b7c5f3ebab93a78b832a23905a0e07af535800..66b1d65dedf8c368f9c37a37ff43a178cf26d442 100644 (file)
@@ -198,7 +198,7 @@ namespace {
   Depth PassedPawnExtension[2], PawnEndgameExtension[2], MateThreatExtension[2];
 
   // Minimum depth for use of singular extension
-  const Depth SingularExtensionDepth[2] = { 8 * OnePly /* non-PV */, 6 * OnePly /* PV */};
+  const Depth SingularExtensionDepth[2] = { 7 * OnePly /* non-PV */, 6 * OnePly /* PV */};
 
   // If the TT move is at least SingularExtensionMargin better then the
   // remaining ones we will extend it.
@@ -1062,7 +1062,7 @@ namespace {
         // Refresh tte entry to avoid aging
         TT.store(posKey, tte->value(), tte->type(), tte->depth(), ttMove, tte->static_value(), tte->king_danger());
 
-        ss->currentMove = ttMove; // Can be MOVE_NONE
+        ss->bestMove = ttMove; // Can be MOVE_NONE
         return value_from_tt(tte->value(), ply);
     }
 
@@ -1176,7 +1176,7 @@ namespace {
             if (nullValue == value_mated_in(ply + 2))
                 mateThreat = true;
 
-            threatMove = (ss+1)->currentMove;
+            threatMove = (ss+1)->bestMove;
             if (   depth < ThreatDepth
                 && (ss-1)->reduction
                 && connected_moves(pos, (ss-1)->currentMove, threatMove))
@@ -1213,6 +1213,17 @@ namespace {
                            && is_lower_bound(tte->type())
                            && tte->depth() >= depth - 3 * OnePly;
 
+    // Avoid to do an expensive singular extension search on nodes where
+    // such search had already failed in the past.
+    if (  !PvNode
+        && singularExtensionNode
+        && depth < SingularExtensionDepth[PvNode] + 5 * OnePly)
+    {
+        TTEntry* ttx = TT.retrieve(pos.get_exclusion_key());
+        if (ttx && is_lower_bound(ttx->type()))
+            singularExtensionNode = false;
+    }
+
     // Step 10. Loop through moves
     // Loop through all legal moves until no moves remain or a beta cutoff occurs
     while (   bestValue < beta
@@ -1449,7 +1460,7 @@ namespace {
 
     if (!PvNode && tte && ok_to_use_TT(tte, depth, beta, ply))
     {
-        ss->currentMove = ttMove; // Can be MOVE_NONE
+        ss->bestMove = ttMove; // Can be MOVE_NONE
         return value_from_tt(tte->value(), ply);
     }