1515#include " klee/Expr/ExprHashMap.h"
1616#include " klee/Expr/ExprUtil.h"
1717#include " klee/Expr/ExprVisitor.h"
18+ #include " klee/Expr/IndependentSet.h"
1819#include " klee/Expr/Path.h"
1920#include " klee/Expr/Symcrete.h"
2021#include " klee/Module/KModule.h"
@@ -289,7 +290,11 @@ void ConstraintSet::print(llvm::raw_ostream &os) const {
289290
290291void ConstraintSet::dump () const { this ->print (llvm::errs ()); }
291292
292- void ConstraintSet::changeCS (constraints_ty &cs) { _constraints = cs; }
293+ void ConstraintSet::changeCS (constraints_ty &cs) {
294+ _constraints = cs;
295+ _independentElements =
296+ IndependentConstraintSetUnion (_constraints, _symcretes, _concretization);
297+ }
293298
294299const constraints_ty &ConstraintSet::cs () const { return _constraints; }
295300
@@ -355,10 +360,12 @@ ExprHashSet PathConstraints::addConstraint(ref<Expr> e, const Assignment &delta,
355360 if (RewriteEqualities != RewriteEqualitiesPolicy::None) {
356361 auto simplified =
357362 Simplificator::simplify (constraints.cs (), RewriteEqualities);
358- constraints.changeCS (simplified.simplified );
363+ if (simplified.wasSimplified ) {
364+ constraints.changeCS (simplified.simplified );
359365
360- _simplificationMap = Simplificator::composeExprDependencies (
361- _simplificationMap, simplified.dependency );
366+ _simplificationMap = Simplificator::composeExprDependencies (
367+ _simplificationMap, simplified.dependency );
368+ }
362369 }
363370
364371 return added;
@@ -463,6 +470,7 @@ Simplificator::simplify(const constraints_ty &constraints,
463470 dependencies.insert ({constraint, {constraint}});
464471 }
465472
473+ bool actuallyChanged = false ;
466474 bool changed = true ;
467475 while (changed) {
468476 changed = false ;
@@ -495,6 +503,7 @@ Simplificator::simplify(const constraints_ty &constraints,
495503 currentDependencies[part].insert (constraint);
496504 }
497505 if (constraint != simplifiedConstraint || andsSplit.size () > 1 ) {
506+ actuallyChanged = true ;
498507 changed = true ;
499508 }
500509 }
@@ -508,7 +517,7 @@ Simplificator::simplify(const constraints_ty &constraints,
508517 simplified.erase (ConstantExpr::createTrue ());
509518 dependencies.erase (ConstantExpr::createTrue ());
510519
511- return {simplified, dependencies};
520+ return {simplified, dependencies, actuallyChanged };
512521}
513522
514523Simplificator::Replacements
0 commit comments