ttMove = ss[ply].pv[ply];
tte = TT.retrieve(pos.get_key());
- // Following assert could fail, for instance when we have
- // moveCount == 0 we return without saving a TT entry.
- /* assert(tte); */
+ // If tte->move() != MOVE_NONE then it equals ttMove
+ assert(!(tte && tte->move()) || tte->move() == ttMove);
}
// Initialize a MovePicker object for the current position, and prepare
// To verify this we do a reduced search on all the other moves but the ttMove,
// if result is lower then TT value minus a margin then we assume ttMove is the
// only one playable. It is a kind of relaxed single reply extension.
- // Note that could be ttMove != tte->move() due to IID, so we always use tte->move()
- // to avoid aliases when we probe tte->depth() and tte->type()
- if ( depth >= 8 * OnePly
+ if ( depth >= 6 * OnePly
&& tte
&& move == tte->move()
&& ext < OnePly
if (abs(ttValue) < VALUE_KNOWN_WIN)
{
- Value excValue = search(pos, ss, ttValue - SingleReplyMargin, depth / 2, ply, false, threadID, ttMove);
+ Value excValue = search(pos, ss, ttValue - SingleReplyMargin, depth / 2, ply, false, threadID, move);
// If search result is well below the foreseen score of the ttMove then we
// assume ttMove is the only one realistically playable and we extend it.
// To verify this we do a reduced search on all the other moves but the ttMove,
// if result is lower then TT value minus a margin then we assume ttMove is the
// only one playable. It is a kind of relaxed single reply extension.
- // Note that could be ttMove != tte->move() due to IID, so we always use tte->move()
- // to avoid aliases when we probe tte->depth() and tte->type()
if ( depth >= 8 * OnePly
&& tte
&& move == tte->move()
if (abs(ttValue) < VALUE_KNOWN_WIN)
{
- Value excValue = search(pos, ss, ttValue - SingleReplyMargin, depth / 2, ply, false, threadID, ttMove);
+ Value excValue = search(pos, ss, ttValue - SingleReplyMargin, depth / 2, ply, false, threadID, move);
// If search result is well below the foreseen score of the ttMove then we
// assume ttMove is the only one realistically playable and we extend it.