mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Improving polarity caching to target phases
This commit is contained in:
parent
a13b5332c2
commit
f163f9b7ce
@ -293,7 +293,6 @@ void CDCL::enqueue(Literal const& _literal, Clause const* _reason)
|
|||||||
m_levelForVariable[_literal.variable] = currentDecisionLevel();
|
m_levelForVariable[_literal.variable] = currentDecisionLevel();
|
||||||
if (_reason) {
|
if (_reason) {
|
||||||
m_reason[_literal] = _reason;
|
m_reason[_literal] = _reason;
|
||||||
m_assignments_cache[_literal.variable] = _literal.positive;
|
|
||||||
}
|
}
|
||||||
m_assignmentTrail.push_back(_literal);
|
m_assignmentTrail.push_back(_literal);
|
||||||
}
|
}
|
||||||
@ -304,6 +303,11 @@ void CDCL::cancelUntil(size_t _backtrackLevel)
|
|||||||
//cout << "Canceling until " << _backtrackLevel << endl;
|
//cout << "Canceling until " << _backtrackLevel << endl;
|
||||||
solAssert(m_assignmentQueuePointer == m_assignmentTrail.size());
|
solAssert(m_assignmentQueuePointer == m_assignmentTrail.size());
|
||||||
size_t assignmentsToUndo = m_assignmentTrail.size() - m_decisionPoints.at(_backtrackLevel);
|
size_t assignmentsToUndo = m_assignmentTrail.size() - m_decisionPoints.at(_backtrackLevel);
|
||||||
|
if (m_assignmentTrail.size() > m_longest_trail) {
|
||||||
|
m_assignments_cache= m_assignments;
|
||||||
|
m_longest_trail = m_assignmentTrail.size();
|
||||||
|
}
|
||||||
|
|
||||||
for (size_t i = 0; i < assignmentsToUndo; i++)
|
for (size_t i = 0; i < assignmentsToUndo; i++)
|
||||||
{
|
{
|
||||||
Literal l = m_assignmentTrail.back();
|
Literal l = m_assignmentTrail.back();
|
||||||
|
@ -154,6 +154,7 @@ private:
|
|||||||
// TODO group those into a class
|
// TODO group those into a class
|
||||||
|
|
||||||
std::vector<Literal> m_assignmentTrail;
|
std::vector<Literal> m_assignmentTrail;
|
||||||
|
uint64_t m_longest_trail = 0;
|
||||||
/// Indices into assignmentTrail where decisions were taken.
|
/// Indices into assignmentTrail where decisions were taken.
|
||||||
std::vector<size_t> m_decisionPoints;
|
std::vector<size_t> m_decisionPoints;
|
||||||
/// Index into assignmentTrail: All assignments starting there have not yet been propagated.
|
/// Index into assignmentTrail: All assignments starting there have not yet been propagated.
|
||||||
|
Loading…
Reference in New Issue
Block a user