From 28106307edd45dde1095b68af0bbc3d0f12cca69 Mon Sep 17 00:00:00 2001 From: pkrisz99 <5463243+pkrisz99@users.noreply.github.com> Date: Tue, 3 Feb 2026 23:29:41 +0100 Subject: [PATCH 1/2] Only do TT cutoffs in qsearch when being off-PV Bench: 16752988 --- src/search.cpp | 17 +++++++---------- src/search.hpp | 2 +- 2 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index d785814c..58b77170 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -390,7 +390,7 @@ Value Worker::search( } if (depth <= 0) { - return quiesce(pos, ss, alpha, beta, ply); + return quiesce(pos, ss, alpha, beta, ply); } const bool ROOT_NODE = ply == 0; @@ -528,7 +528,7 @@ Value Worker::search( // Razoring if (!PV_NODE && !excluded && !is_in_check && depth <= tuned::razor_depth && ss->static_eval + tuned::razor_margin * depth < alpha) { - const Value razor_score = quiesce(pos, ss, alpha, beta, ply); + const Value razor_score = quiesce(pos, ss, alpha, beta, ply); if (razor_score <= alpha) { return razor_score; } @@ -559,7 +559,7 @@ Value Worker::search( repetition_info.push(pos_after.get_hash_key(), pos_after.is_reversible(m)); Value probcut_value = - -quiesce(pos_after, ss + 1, -probcut_beta, -probcut_beta + 1, ply + 1); + -quiesce(pos_after, ss + 1, -probcut_beta, -probcut_beta + 1, ply + 1); if (probcut_value >= probcut_beta) { probcut_value = @@ -901,7 +901,7 @@ Value Worker::search( return best_value; } -template +template Value Worker::quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i32 ply) { ss->pv.clear(); @@ -942,7 +942,7 @@ Value Worker::quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i // TT Probing auto tt_data = m_searcher.tt.probe(pos, ply); - if (tt_data + if (!PV_NODE && tt_data && (tt_data->bound() == Bound::Exact || (tt_data->bound() == Bound::Lower && tt_data->score >= beta) || (tt_data->bound() == Bound::Upper && tt_data->score <= alpha))) { @@ -950,10 +950,7 @@ Value Worker::quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i } bool is_in_check = pos.is_in_check(); - bool ttpv = - tt_data - ? tt_data->ttpv() - : false; // TODO: if we ever get to needing ttpv patches in quiescence, we might want to add PV_NODE handling in here also + bool ttpv = PV_NODE || (tt_data && tt_data->ttpv()); Value correction = 0; Value raw_eval = -VALUE_INF; Value static_eval = -VALUE_INF; @@ -1006,7 +1003,7 @@ Value Worker::quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i repetition_info.push(pos_after.get_hash_key(), pos_after.is_reversible(m)); // Get search value - Value value = -quiesce(pos_after, ss + 1, -beta, -alpha, ply + 1); + Value value = -quiesce(pos_after, ss + 1, -beta, -alpha, ply + 1); // TODO: encapsulate this and any other future adjustment to do "on going back" into a proper function repetition_info.pop(); diff --git a/src/search.hpp b/src/search.hpp index dff28fbb..d1e813e8 100644 --- a/src/search.hpp +++ b/src/search.hpp @@ -190,7 +190,7 @@ class alignas(128) Worker { template Value search( const Position& pos, Stack* ss, Value alpha, Value beta, Depth depth, i32 ply, bool cutnode); - template + template Value quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i32 ply); Value evaluate(const Position& pos); Value adj_shuffle(const Position& pos, Value value); From e96d842e75eb5bcddb3e813e89cd9f1e6b09d831 Mon Sep 17 00:00:00 2001 From: TheRealGioviok <425gioviok@gmail.com> Date: Mon, 9 Feb 2026 00:13:33 +0100 Subject: [PATCH 2/2] Format Bench: 16752988 --- src/search.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/search.cpp b/src/search.cpp index 58b77170..dd3e1f2f 100644 --- a/src/search.cpp +++ b/src/search.cpp @@ -558,8 +558,8 @@ Value Worker::search( Position pos_after = pos.move(m, m_td.push_psqt_state(), &m_searcher.tt); repetition_info.push(pos_after.get_hash_key(), pos_after.is_reversible(m)); - Value probcut_value = - -quiesce(pos_after, ss + 1, -probcut_beta, -probcut_beta + 1, ply + 1); + Value probcut_value = -quiesce(pos_after, ss + 1, -probcut_beta, + -probcut_beta + 1, ply + 1); if (probcut_value >= probcut_beta) { probcut_value = @@ -949,8 +949,8 @@ Value Worker::quiesce(const Position& pos, Stack* ss, Value alpha, Value beta, i return tt_data->score; } - bool is_in_check = pos.is_in_check(); - bool ttpv = PV_NODE || (tt_data && tt_data->ttpv()); + bool is_in_check = pos.is_in_check(); + bool ttpv = PV_NODE || (tt_data && tt_data->ttpv()); Value correction = 0; Value raw_eval = -VALUE_INF; Value static_eval = -VALUE_INF;