]> git.sesse.net Git - stockfish/blobdiff - src/search.cpp
Convert move_is_check() to take a CheckInfo reference
[stockfish] / src / search.cpp
index 23066d8f5d7186aa5391dca08822787624c53e0d..e5063b2453b01ff490f167993ddd3099f2a60a2b 100644 (file)
@@ -1103,11 +1103,8 @@ namespace {
     tte = TT.retrieve(pos.get_key());
     ttMove = (tte ? tte->move() : MOVE_NONE);
 
-    // Go with internal iterative deepening if we don't have a TT move or
-    // if search depth is more then 4*OnePly higher then TT move depth.
-    if (   UseIIDAtPVNodes
-        && depth >= 5*OnePly
-        &&(!ttMove || depth > tte->depth() + 4*OnePly))
+    // Go with internal iterative deepening if we don't have a TT move
+    if (UseIIDAtPVNodes && ttMove == MOVE_NONE && depth >= 5*OnePly)
     {
         search_pv(pos, ss, alpha, beta, depth-2*OnePly, ply, threadID);
         ttMove = ss[ply].pv[ply];
@@ -1117,7 +1114,8 @@ namespace {
     // to search all moves
     isCheck = pos.is_check();
     mateThreat = pos.has_mate_threat(opposite_color(pos.side_to_move()));
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
 
     // Loop through all legal moves until no moves remain or a beta cutoff
@@ -1129,7 +1127,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
-      moveIsCheck = pos.move_is_check(move, dcCandidates);
+      moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1374,7 +1372,8 @@ namespace {
     // Initialize a MovePicker object for the current position, and prepare
     // to search all moves.
     MovePicker mp = MovePicker(pos, ttMove, depth, H, &ss[ply]);
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     futilityValue = VALUE_NONE;
     useFutilityPruning = depth < SelectiveDepth && !isCheck;
 
@@ -1391,7 +1390,7 @@ namespace {
       assert(move_is_ok(move));
 
       singleReply = (isCheck && mp.number_of_evasions() == 1);
-      moveIsCheck = pos.move_is_check(move, dcCandidates);
+      moveIsCheck = pos.move_is_check(move, ci);
       captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       movesSearched[moveCount++] = ss[ply].currentMove = move;
@@ -1595,7 +1594,8 @@ namespace {
     // to search the moves.  Because the depth is <= 0 here, only captures,
     // queen promotions and checks (only if depth == 0) will be generated.
     MovePicker mp = MovePicker(pos, ttMove, depth, H);
-    dcCandidates = pos.discovered_check_candidates(pos.side_to_move());
+    CheckInfo ci(pos);
+    dcCandidates = ci.dcCandidates;
     enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
 
     // Loop through the moves until no moves remain or a beta cutoff
@@ -1613,7 +1613,7 @@ namespace {
           && !isCheck
           && !pvNode
           && !move_is_promotion(move)
-          && !pos.move_is_check(move, dcCandidates)
+          && !pos.move_is_check(move, ci)
           && !pos.move_is_passed_pawn_push(move))
       {
           futilityValue =  staticValue
@@ -1701,6 +1701,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1714,7 +1715,7 @@ namespace {
     {
       assert(move_is_ok(move));
 
-      bool moveIsCheck = pos.move_is_check(move, sp->dcCandidates);
+      bool moveIsCheck = pos.move_is_check(move, ci);
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       lock_grab(&(sp->lock));
@@ -1844,6 +1845,7 @@ namespace {
     assert(ActiveThreads > 1);
 
     Position pos = Position(sp->pos);
+    CheckInfo ci(pos);
     SearchStack* ss = sp->sstack[threadID];
     Value value;
     Move move;
@@ -1852,7 +1854,7 @@ namespace {
            && !thread_should_stop(threadID)
            && (move = sp->mp->get_next_move(sp->lock)) != MOVE_NONE)
     {
-      bool moveIsCheck = pos.move_is_check(move, sp->dcCandidates);
+      bool moveIsCheck = pos.move_is_check(move, ci);
       bool captureOrPromotion = pos.move_is_capture_or_promotion(move);
 
       assert(move_is_ok(move));