qsearch: do not call evaluate when in check
authorMarco Costalba <mcostalba@gmail.com>
Tue, 16 Dec 2008 11:55:44 +0000 (12:55 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 16 Dec 2008 21:20:18 +0000 (22:20 +0100)
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index 017f65be3984d30c312679164d47431d4fc441a1..71aea553dc0fa7c5edd67d270124d04d8b9a461f 100644 (file)
@@ -1439,14 +1439,15 @@ namespace {
         return value_from_tt(tte->value(), ply);
 
     // Evaluate the position statically
-    Value staticValue = evaluate(pos, ei, threadID);
+    bool isCheck = pos.is_check();
+    Value staticValue = (isCheck ? -VALUE_INFINITE : evaluate(pos, ei, threadID));
 
     if (ply == PLY_MAX - 1)
-        return staticValue;
+        return evaluate(pos, ei, threadID);
 
     // Initialize "stand pat score", and return it immediately if it is
     // at least beta.
-    Value bestValue = (pos.is_check() ? -VALUE_INFINITE : staticValue);
+    Value bestValue = staticValue;
 
     if (bestValue >= beta)
         return bestValue;
@@ -1458,11 +1459,10 @@ namespace {
     // to search the moves.  Because the depth is <= 0 here, only captures,
     // queen promotions and checks (only if depth == 0) will be generated.
     bool pvNode = (beta - alpha != 1);
-    MovePicker mp = MovePicker(pos, pvNode, MOVE_NONE, EmptySearchStack, depth, &ei);
+    MovePicker mp = MovePicker(pos, pvNode, MOVE_NONE, EmptySearchStack, depth, isCheck ? NULL : &ei);
     Move move;
     int moveCount = 0;
     Bitboard dcCandidates = mp.discovered_check_candidates();
-    bool isCheck = pos.is_check();
     bool enoughMaterial = pos.non_pawn_material(pos.side_to_move()) > RookValueMidgame;
 
     // Loop through the moves until no moves remain or a beta cutoff