X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=58feb77d7038fc49dcb24821dbf9b762fa84925c;hp=b1f64536f6db51f1a09b8982a31ae7dc35ef1476;hb=cbcc581a86417ead9f75ae3a9556f97df63b22bf;hpb=fe23c70cf163514620deba3c4ef9a3b8f4ceabb1 diff --git a/src/search.cpp b/src/search.cpp index b1f64536..58feb77d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -979,7 +979,7 @@ namespace { Move movesSearched[256]; EvalInfo ei; StateInfo st; - const TTEntry* tte; + const TTEntry *tte, *ttx; Key posKey; Move ttMove, move, excludedMove, threatMove; Depth ext, newDepth; @@ -1190,17 +1190,6 @@ namespace { && is_lower_bound(tte->type()) && tte->depth() >= depth - 3 * OnePly; - // Avoid to do an expensive singular extension search on nodes where - // such search had already failed in the past. - if ( !PvNode - && singularExtensionNode - && depth < SingularExtensionDepth[PvNode] + 5 * OnePly) - { - TTEntry* ttx = TT.retrieve(pos.get_exclusion_key()); - if (ttx && is_lower_bound(ttx->type())) - singularExtensionNode = false; - } - // Step 10. Loop through moves // Loop through all legal moves until no moves remain or a beta cutoff occurs while ( bestValue < beta @@ -1226,9 +1215,22 @@ namespace { && move == tte->move() && ext < OnePly) { + // Avoid to do an expensive singular extension search on nodes where + // such search have already been done in the past, so assume the last + // singular extension search result is still valid. + if ( !PvNode + && depth < SingularExtensionDepth[PvNode] + 5 * OnePly + && ((ttx = TT.retrieve(pos.get_exclusion_key())) != NULL)) + { + if (is_upper_bound(ttx->type())) + ext = OnePly; + + singularExtensionNode = false; + } + Value ttValue = value_from_tt(tte->value(), ply); - if (abs(ttValue) < VALUE_KNOWN_WIN) + if (singularExtensionNode && abs(ttValue) < VALUE_KNOWN_WIN) { Value b = ttValue - SingularExtensionMargin; ss->excludedMove = move;