+ if (Problem && StopOnPonderhit)
+ StopOnPonderhit = false;
+ }
+ else
+ {
+ // Try to reduce non-pv search depth by one ply if move seems not problematic,
+ // if the move fails high will be re-searched at full depth.
+ bool doFullDepthSearch = true;
+
+ if ( depth >= 3*OnePly // FIXME was newDepth
+ && !dangerous
+ && !captureOrPromotion
+ && !move_is_castle(move))
+ {
+ ss[0].reduction = pv_reduction(depth, RootMoveNumber - MultiPV + 1);
+ if (ss[0].reduction)
+ {
+ value = -search(pos, ss, -alpha, newDepth-ss[0].reduction, 1, true, 0);
+ doFullDepthSearch = (value > alpha);
+ }
+ }
+
+ if (doFullDepthSearch)
+ {
+ ss[0].reduction = Depth(0);
+ value = -search(pos, ss, -alpha, newDepth, 1, true, 0);
+
+ if (value > alpha)
+ {
+ // Fail high! Set the boolean variable FailHigh to true, and
+ // re-search the move using a PV search. The variable FailHigh
+ // is used for time managment: We try to avoid aborting the
+ // search prematurely during a fail high research.
+ FailHigh = true;
+ value = -search_pv(pos, ss, -beta, -alpha, newDepth, 1, 0);
+ }
+ }
+ }