mirror of https://github.com/YosysHQ/yosys.git
Added ezSAT::eliminated API to help the SAT solver remember eliminated variables
This commit is contained in:
parent
23f0a12c72
commit
d500bd749f
|
@ -65,6 +65,14 @@ void ezMiniSAT::freeze(int id)
|
|||
{
|
||||
cnfFrozenVars.insert(bind(id));
|
||||
}
|
||||
|
||||
bool ezMiniSAT::eliminated(int idx)
|
||||
{
|
||||
idx = idx < 0 ? -idx : idx;
|
||||
if (minisatSolver != NULL && idx > 0 && idx <= int(minisatVars.size()))
|
||||
return minisatSolver->isEliminated(minisatVars.at(idx-1));
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
ezMiniSAT *ezMiniSAT::alarmHandlerThis = NULL;
|
||||
|
|
|
@ -61,6 +61,7 @@ public:
|
|||
virtual void clear();
|
||||
#if EZMINISAT_SIMPSOLVER && EZMINISAT_INCREMENTAL
|
||||
virtual void freeze(int id);
|
||||
virtual bool eliminated(int idx);
|
||||
#endif
|
||||
virtual bool solver(const std::vector<int> &modelExpressions, std::vector<bool> &modelValues, const std::vector<int> &assumptions);
|
||||
};
|
||||
|
|
|
@ -348,9 +348,13 @@ void ezSAT::freeze(int)
|
|||
{
|
||||
}
|
||||
|
||||
bool ezSAT::eliminated(int)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
void ezSAT::assume(int id)
|
||||
{
|
||||
|
||||
if (id < 0)
|
||||
{
|
||||
assert(0 < -id && -id <= int(expressions.size()));
|
||||
|
@ -486,7 +490,7 @@ int ezSAT::bind(int id)
|
|||
if (id >= 0) {
|
||||
assert(0 < id && id <= int(literals.size()));
|
||||
cnfLiteralVariables.resize(literals.size());
|
||||
if (cnfLiteralVariables[id-1] == 0) {
|
||||
if (cnfLiteralVariables[id-1] == 0 || eliminated(cnfLiteralVariables[id-1])) {
|
||||
cnfLiteralVariables[id-1] = ++cnfVariableCount;
|
||||
if (id == TRUE)
|
||||
add_clause(+cnfLiteralVariables[id-1]);
|
||||
|
@ -499,7 +503,7 @@ int ezSAT::bind(int id)
|
|||
assert(0 < -id && -id <= int(expressions.size()));
|
||||
cnfExpressionVariables.resize(expressions.size());
|
||||
|
||||
if (cnfExpressionVariables[-id-1] == 0)
|
||||
if (cnfExpressionVariables[-id-1] == 0 || eliminated(cnfExpressionVariables[-id-1]))
|
||||
{
|
||||
OpId op;
|
||||
std::vector<int> args;
|
||||
|
|
|
@ -141,6 +141,7 @@ public:
|
|||
|
||||
virtual void clear();
|
||||
virtual void freeze(int id);
|
||||
virtual bool eliminated(int idx);
|
||||
void assume(int id);
|
||||
int bind(int id);
|
||||
int bound(int id) const;
|
||||
|
|
Loading…
Reference in New Issue