summaryrefslogtreecommitdiff
path: root/src/split.c
diff options
context:
space:
mode:
authorScott Gasch <[email protected]>2026-09-15 23:17:33 -0700
committerScott Gasch <[email protected]>2026-09-15 23:17:33 -0700
commitc0ac3d7845f60c7f6f2c3bfc306ceb0e4ac045ba (patch)
treee2b7427e212bd5b557f15131b815517a86b20486 /src/split.c
parent0bb4ae3052cb8ff9ffcf951b3ef0e6f50a7efdfa (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.c21
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);
//