assert(depth >= 5 * ONE_PLY);
pos.do_move(move, st);
- value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false);
+
+ // Perform a preliminary search at depth 1 to verify that the move holds.
+ // We will only do this search if the depth is not 5, thus avoiding two
+ // searches at depth 1 in a row.
+ if (depth != 5 * ONE_PLY)
+ value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, ONE_PLY, !cutNode, true);
+
+ // If the first search was skipped or was performed and held, perform
+ // the regular search.
+ if (depth == 5 * ONE_PLY || value >= rbeta)
+ value = -search<NonPV>(pos, ss+1, -rbeta, -rbeta+1, depth - 4 * ONE_PLY, !cutNode, false);
+
pos.undo_move(move);
if (value >= rbeta)
return value;