Avoids aliasing problems due to TT overwrites.
Node changes becuase of IID.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
search<PvNode>(pos, ss, alpha, beta, d);
ss->skipNullMove = false;
search<PvNode>(pos, ss, alpha, beta, d);
ss->skipNullMove = false;
+ ttMove = tte ? tte->move() : MOVE_NONE;
}
split_point_start: // At split points actual search starts from here
}
split_point_start: // At split points actual search starts from here
singularExtensionNode = !Root
&& !SpNode
&& depth >= SingularExtensionDepth[PvNode]
singularExtensionNode = !Root
&& !SpNode
&& depth >= SingularExtensionDepth[PvNode]
- && tte
- && tte->move()
&& !excludedMove // Do not allow recursive singular extension search
&& (tte->type() & VALUE_TYPE_LOWER)
&& tte->depth() >= depth - 3 * ONE_PLY;
&& !excludedMove // Do not allow recursive singular extension search
&& (tte->type() & VALUE_TYPE_LOWER)
&& tte->depth() >= depth - 3 * ONE_PLY;
// on all the other moves but the ttMove, if result is lower than ttValue minus
// a margin then we extend ttMove.
if ( singularExtensionNode
// on all the other moves but the ttMove, if result is lower than ttValue minus
// a margin then we extend ttMove.
if ( singularExtensionNode
&& ext < ONE_PLY)
{
Value ttValue = value_from_tt(tte->value(), ss->ply);
&& ext < ONE_PLY)
{
Value ttValue = value_from_tt(tte->value(), ss->ply);