diff options
| author | Scott Gasch <[email protected]> | 2026-09-15 23:17:33 -0700 |
|---|---|---|
| committer | Scott Gasch <[email protected]> | 2026-09-15 23:17:33 -0700 |
| commit | c0ac3d7845f60c7f6f2c3bfc306ceb0e4ac045ba (patch) | |
| tree | e2b7427e212bd5b557f15131b815517a86b20486 /src/split.c | |
| parent | 0bb4ae3052cb8ff9ffcf951b3ef0e6f50a7efdfa (diff) | |
Rework check/pawn-push/recapture extension gating on real SEE (GetMoveSee, generalized from GetCheckSee), restrict LMR to leftover moves only, and tighten recapture's window back to 1x after measuring a 6.8x node blowup from sharing the wider window.
Head-to-head match at 1170 games confirms parity with the prior head (score=0.510, LLR still between bounds) -- landing as a neutral-or-better baseline rather than a regression.
Diffstat (limited to 'src/split.c')
| -rw-r--r-- | src/split.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/src/split.c b/src/split.c index 3a69ab4..679d26d 100644 --- a/src/split.c +++ b/src/split.c @@ -1081,7 +1081,7 @@ Return value: INT iOrigExtend; INT iExtend; MOVE mv; - SCORE iCheckSee; + SCORE iMoveSee; #ifdef DEBUG POSITION board; @@ -1120,10 +1120,11 @@ Return value: ASSERT(iExtend <= +ONE_PLY); // SEE on the PRE-move position -- see search.c's identical comment. - iCheckSee = 0; - if (IS_CHECKING_MOVE(mv)) + iMoveSee = 0; + if (IS_CHECKING_MOVE(mv) || + (mv.pCaptured && !IS_PAWN(mv.pCaptured) && (uDepth <= THREE_PLY))) { - iCheckSee = GetCheckSee(ctx, + iMoveSee = GetMoveSee(ctx, mv, ctx->sMoveStack.uBegin[ctx->uPly] + uMoveNum); @@ -1134,14 +1135,22 @@ Return value: ASSERT((IS_CHECKING_MOVE(mv) && InCheck(&ctx->sPosition, ctx->sPosition.uToMove)) || (!IS_CHECKING_MOVE(mv) && !InCheck(&ctx->sPosition, ctx->sPosition.uToMove))); - // Compute extension + // Compute extension. fIsLeftoverMove is unconditionally TRUE + // here: search.c only ever starts a split when the move it + // was about to try was itself already classified as a + // leftover move (see its own fIsLeftoverMove-gated split + // condition) -- every move HelpSearch pulls from the shared + // pool for that split is drawn from that same leftover + // range, so there's no "early, well-ordered move" case to + // distinguish here. ComputeMoveExtension(ctx, iAlpha, iBeta, (ctx->sMoveStack.uBegin[ctx->uPly - 1] + uMoveNum), iEval, uDepth, - iCheckSee, + iMoveSee, + TRUE, &iExtend); // |
