X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=022f3a9d15b8a08a5c78483490156051e4f732d7;hp=434587a87d5c6e40c627ca3a54edfbad779a1f0d;hb=6a8e46d53efca6dd56a396b32f43bef9f95127d6;hpb=c6c4713ab2fb19e542b13df3b48bd14313bc5ad7 diff --git a/src/search.cpp b/src/search.cpp index 434587a8..022f3a9d 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -1455,7 +1455,7 @@ namespace { if (isCheck) staticValue = -VALUE_INFINITE; - else if (tte && tte->type() == VALUE_TYPE_EVAL) + else if (tte && (tte->type() == VALUE_TYPE_EVAL || tte->staticValue())) { // Use the cached evaluation score if possible assert(tte->value() == evaluate(pos, ei, threadID)); @@ -1569,10 +1569,21 @@ namespace { if (!pvNode) { Depth d = (depth == Depth(0) ? Depth(0) : Depth(-1)); + Value v = value_to_tt(bestValue, ply); + TTEntry* e; if (bestValue < beta) - TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_UPPER); + e = TT.store(pos, v, d, MOVE_NONE, VALUE_TYPE_UPPER); else - TT.store(pos, value_to_tt(bestValue, ply), d, MOVE_NONE, VALUE_TYPE_LOWER); + e = TT.store(pos, v, d, MOVE_NONE, VALUE_TYPE_LOWER); + + assert(e && e == TT.retrieve(pos)); + assert(!e->staticValue()); + + // If the just stored value happens to be equal to the static evaluation + // score then set the flag, so to avoid calling evaluation() next time we + // hit this position. + if (staticValue == v && !ei.futilityMargin) + e->setStaticValue(); } // Update killers only for good check moves