Skip to content

Commit 6dddcec

Browse files
Sopel97vondele
authored andcommitted
Optimize generate_moves
This change simplifies control flow in the generate_moves function which ensures the compiler doesn't duplicate work due to possibly not resolving pureness of the function calls. Also the biggest change is the removal of the unnecessary condition checking for empty b in a convoluted way. The rationale for removal of this condition is that computing attacks_bb with occupancy is not much more costly than computing pseudo attacks and overall the condition (also being likely unpredictable) is a pessimisation. This is inspired by previous changes by @BM123499. Passed STC: LLR: 2.94 (-2.94,2.94) {-0.25,1.25} Total: 88040 W: 8172 L: 7931 D: 71937 Ptnml(0-2): 285, 6128, 30957, 6361, 289 https://tests.stockfishchess.org/tests/view/5ffc28386019e097de3ef1c7 closes #3300 No functional change.
1 parent ee3f7b6 commit 6dddcec

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

src/movegen.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -180,17 +180,17 @@ namespace {
180180

181181
Bitboard bb = piecesToMove & pos.pieces(Pt);
182182

183+
if (!bb)
184+
return moveList;
185+
186+
[[maybe_unused]] const Bitboard checkSquares = pos.check_squares(Pt);
187+
183188
while (bb) {
184189
Square from = pop_lsb(&bb);
185190

186-
if (Checks && (Pt == BISHOP || Pt == ROOK || Pt == QUEEN)
187-
&& !(attacks_bb<Pt>(from) & target & pos.check_squares(Pt)))
188-
continue;
189-
190191
Bitboard b = attacks_bb<Pt>(from, pos.pieces()) & target;
191-
192-
if (Checks)
193-
b &= pos.check_squares(Pt);
192+
if constexpr (Checks)
193+
b &= checkSquares;
194194

195195
while (b)
196196
*moveList++ = make_move(from, pop_lsb(&b));

0 commit comments

Comments
 (0)