EvalInfo ei;
StateInfo st;
Move ttMove, move;
- Value staticValue, bestValue, value, futilityBase, futilityValue;
+ Value staticValue, bestValue, value, futilityBase;
bool isCheck, enoughMaterial, moveIsCheck, evasionPrunable;
const TTEntry* tte = NULL;
int moveCount = 0;
int ply = pos.ply();
Value oldAlpha = alpha;
+ Value futilityValue = VALUE_INFINITE;
TM.incrementNodeCounter(pos.thread());
ss->init(ply);
return bestValue;
}
- if (bestValue > alpha)
+ if (PvNode && bestValue > alpha)
alpha = bestValue;
// If we are near beta then try to get a cutoff pushing checks a bit further
&& !move_is_promotion(move)
&& !pos.move_is_passed_pawn_push(move))
{
+ // Can only decrease from previous move because of
+ // MVV ordering so we don't need to recheck.
+ if (futilityValue < alpha)
+ continue;
+
futilityValue = futilityBase
+ pos.endgame_value_of_piece_on(move_to(move))
+ (move_is_ep(move) ? PawnValueEndgame : Value(0));