]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Store score in TT when null search fails high
[stockfish] / src / search.cpp
index 7b4ba28618c537eb5804a67107008a150bb4d3a0..94c03619a39e8c818739316096f1acfc87b08574 100644 (file)
@@ -87,7 +87,7 @@ namespace {
                Depth depth, bool mateThreat, int* moves, MovePicker* mp, int master, bool pvNode);
 
   private:
-    friend void poll(SearchStack ss[], int ply);
+    friend void poll();
 
     int ActiveThreads;
     volatile bool AllThreadsShouldExit, AllThreadsShouldSleep;
@@ -302,7 +302,7 @@ namespace {
 
   int current_search_time();
   int nps();
-  void poll(SearchStack ss[], int ply);
+  void poll();
   void ponderhit();
   void wait_for_stop_or_ponderhit();
   void init_ss_array(SearchStack ss[]);
@@ -1379,13 +1379,18 @@ namespace {
             if (nullValue >= value_mate_in(PLY_MAX))
                 nullValue = beta;
 
-            if (depth < 6 * OnePly)
-                return nullValue;
+            // Do zugzwang verification search for high depths, don't store in TT
+            // if search was stopped.
+            if (   (   depth < 6 * OnePly
+                    || search(pos, ss, beta, depth-5*OnePly, ply, false, threadID) >= beta)
+                && !AbortSearch
+                && !TM.thread_should_stop(threadID))
+            {
+                assert(value_to_tt(nullValue, ply) == nullValue);
 
-            // Do zugzwang verification search
-            Value v = search(pos, ss, beta, depth-5*OnePly, ply, false, threadID);
-            if (v >= beta)
+                TT.store(posKey, nullValue, VALUE_TYPE_LOWER, depth, MOVE_NONE);
                 return nullValue;
+            }
         } else {
             // The null move failed low, which means that we may be faced with
             // some kind of threat. If the previous move was reduced, check if
@@ -2046,7 +2051,7 @@ namespace {
         NodesSincePoll++;
         if (NodesSincePoll >= NodesBetweenPolls)
         {
-            poll(ss, ply);
+            poll();
             NodesSincePoll = 0;
         }
     }
@@ -2409,7 +2414,7 @@ namespace {
   // looks at the time consumed so far and decides if it's time to abort the
   // search.
 
-  void poll(SearchStack ss[], int ply) {
+  void poll() {
 
     static int lastInfoTime;
     int t = current_search_time();