X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=2185a3214fc59dd651c3e6639669cbcead83d7df;hp=93651cc047b466724bb959f1102a463f8c2257f3;hb=e4f8a4fa7f5da8287579c0c74e292974c6acfd8d;hpb=9597ad8cabbacf8892c5e8ac97e6c53c61fc4f52 diff --git a/src/search.cpp b/src/search.cpp index 93651cc0..2185a321 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -519,13 +519,25 @@ namespace { template Value search(Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, bool cutNode) { - // Use quiescence search when needed - if (depth < ONE_PLY) - return qsearch(pos, ss, alpha, beta); - constexpr bool PvNode = NT == PV; const bool rootNode = PvNode && ss->ply == 0; + // Check if we have an upcoming move which draws by repetition, or + // if the opponent had an alternative move earlier to this position. + if ( pos.rule50_count() >= 3 + && alpha < VALUE_DRAW + && !rootNode + && pos.has_game_cycle(ss->ply)) + { + alpha = VALUE_DRAW; + if (alpha >= beta) + return alpha; + } + + // Dive into quiescence search when the depth reaches zero + if (depth < ONE_PLY) + return qsearch(pos, ss, alpha, beta); + assert(-VALUE_INFINITE <= alpha && alpha < beta && beta <= VALUE_INFINITE); assert(PvNode || (alpha == beta - 1)); assert(DEPTH_ZERO < depth && depth < DEPTH_MAX); @@ -578,17 +590,6 @@ namespace { beta = std::min(mate_in(ss->ply+1), beta); if (alpha >= beta) return alpha; - - // Check if there exists a move which draws by repetition, or an alternative - // earlier move to this position. - if ( pos.rule50_count() >= 3 - && alpha < VALUE_DRAW - && pos.has_game_cycle(ss->ply)) - { - alpha = VALUE_DRAW; - if (alpha >= beta) - return alpha; - } } assert(0 <= ss->ply && ss->ply < MAX_PLY);