In non-PV IID don't call evaluate when in check
authorMarco Costalba <mcostalba@gmail.com>
Tue, 15 Dec 2009 11:07:23 +0000 (12:07 +0100)
committerMarco Costalba <mcostalba@gmail.com>
Tue, 15 Dec 2009 11:07:23 +0000 (12:07 +0100)
Was a long standing hidden bug from Glaurung times,
triggered only now that we enable IID at non PV nodes.

Signed-off-by: Marco Costalba <mcostalba@gmail.com>
src/search.cpp

index f7a39943740d2021854de3a1788e86b70dcce058..4481cfc727e436b8888825c94ec4bc99d261b21e 100644 (file)
@@ -1435,7 +1435,7 @@ namespace {
 
     // Go with internal iterative deepening if we don't have a TT move
     if (UseIIDAtNonPVNodes && ttMove == MOVE_NONE && depth >= 8*OnePly &&
 
     // Go with internal iterative deepening if we don't have a TT move
     if (UseIIDAtNonPVNodes && ttMove == MOVE_NONE && depth >= 8*OnePly &&
-        evaluate(pos, ei, threadID) >= beta - IIDMargin)
+        !isCheck && evaluate(pos, ei, threadID) >= beta - IIDMargin)
     {
         search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID);
         ttMove = ss[ply].pv[ply];
     {
         search(pos, ss, beta, Min(depth/2, depth-2*OnePly), ply, false, threadID);
         ttMove = ss[ply].pv[ply];