diff --git a/src/constraint_solver/expr_array.cc b/src/constraint_solver/expr_array.cc index b98595f386..c6255da081 100644 --- a/src/constraint_solver/expr_array.cc +++ b/src/constraint_solver/expr_array.cc @@ -2320,10 +2320,14 @@ IntExpr* Solver::MakeSum(const std::vector& vars) { new_max = CapAdd(vars[i]->Max(), new_max); } } - const string name = + const bool all_booleans = AreAllBooleans(vars.data(), vars.size()); + + const string name = all_booleans ? + StringPrintf("BooleanSum([%s])", + DebugStringVector(vars, ", ").c_str()) : StringPrintf("Sum([%s])", DebugStringVector(vars, ", ").c_str()); IntVar* const sum_var = MakeIntVar(new_min, new_max, name); - if (AreAllBooleans(vars.data(), vars.size())) { + if (all_booleans) { AddConstraint(RevAlloc( new SumBooleanEqualToVar(this, vars.data(), vars.size(), sum_var))); } else if (new_min != kint64min && new_max != kint64max) { diff --git a/src/constraint_solver/range_cst.cc b/src/constraint_solver/range_cst.cc index 9c3ef9404e..dc5e7a80ff 100644 --- a/src/constraint_solver/range_cst.cc +++ b/src/constraint_solver/range_cst.cc @@ -1002,7 +1002,7 @@ Constraint* Solver::MakeIsLessOrEqualCt( } else if (right->Bound()) { return MakeIsLessOrEqualCstCt(left->Var(), right->Min(), b); } - return MakeIsLessOrEqualCstCt(MakeDifference(left, right)->Var(), 0, b); + return RevAlloc(new IsLessOrEqualCt(this, left->Var(), right->Var(), b)); } IntVar* Solver::MakeIsLessVar( @@ -1054,7 +1054,7 @@ Constraint* Solver::MakeIsLessCt( } else if (right->Bound()) { return MakeIsLessCstCt(left->Var(), right->Min(), b); } - return MakeIsLessCstCt(MakeDifference(left, right)->Var(), 0, b); + return RevAlloc(new IsLessCt(this, left->Var(), right->Var(), b)); } IntVar* Solver::MakeIsGreaterOrEqualVar(