X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fsearch.cpp;h=dc6ad98b10a937d07997f52f8cf5faed61e8914a;hp=e18a0aafb01405f8c3801fa0ed88b05a1b877799;hb=853e2a9495afbe5789727c4c666c73c8276d8585;hpb=4c3a000211bea046dd9506bae748576ecf6368fa diff --git a/src/search.cpp b/src/search.cpp index e18a0aaf..dc6ad98b 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -904,13 +904,18 @@ split_point_start: // At split points actual search starts from here { assert(move_is_ok(move)); + if (move == excludedMove) + continue; + + // At PV and SpNode nodes we want the moves to be legal + if ((PvNode || SpNode) && !pos.pl_move_is_legal(move, pinned)) + continue; + if (SpNode) { moveCount = ++sp->moveCount; lock_release(&(sp->lock)); } - else if (move == excludedMove) - continue; else moveCount++; @@ -1026,7 +1031,10 @@ split_point_start: // At split points actual search starts from here // Check for legality only before to do the move if (!pos.pl_move_is_legal(move, pinned)) + { + moveCount--; continue; + } ss->currentMove = move; @@ -1370,7 +1378,8 @@ split_point_start: // At split points actual search starts from here } // Detect non-capture evasions that are candidate to be pruned - evasionPrunable = inCheck + evasionPrunable = !PvNode + && inCheck && bestValue > VALUE_MATED_IN_PLY_MAX && !pos.move_is_capture(move) && !pos.can_castle(pos.side_to_move()); @@ -1995,12 +2004,10 @@ split_point_start: // At split points actual search starts from here pos.do_move(pv[0], *st++); - Bitboard pinned = pos.pinned_pieces(pos.side_to_move()); - while ( (tte = TT.probe(pos.get_key())) != NULL && tte->move() != MOVE_NONE && pos.move_is_pl(tte->move()) - && pos.pl_move_is_legal(tte->move(), pinned) + && pos.pl_move_is_legal(tte->move(), pos.pinned_pieces(pos.side_to_move())) && ply < PLY_MAX && (!pos.is_draw() || ply < 2)) {