3
0
Fork 0
mirror of https://github.com/YosysHQ/yosys synced 2025-06-06 14:13:23 +00:00
This commit is contained in:
Your Name 2022-10-18 17:36:25 -04:00
parent d02ae8f2fc
commit 8abaf8240d
2 changed files with 16 additions and 1 deletions

1
.gitignore vendored
View file

@ -8,6 +8,7 @@ __pycache__
/.cproject /.cproject
/.project /.project
/.settings /.settings
/.vscode
/qtcreator.files /qtcreator.files
/qtcreator.includes /qtcreator.includes
/qtcreator.config /qtcreator.config

View file

@ -911,6 +911,10 @@ class SubCircuit::SolverWorker
bool pruneEnumerationMatrix(std::vector<std::set<int>> &enumerationMatrix, const GraphData &needle, const GraphData &haystack, int &nextRow, bool allowOverlap) bool pruneEnumerationMatrix(std::vector<std::set<int>> &enumerationMatrix, const GraphData &needle, const GraphData &haystack, int &nextRow, bool allowOverlap)
{ {
bool didSomething = true; bool didSomething = true;
// Map of j:[i where j is used]
std::map<int, std::set<int>> usedNodes;
while (didSomething) while (didSomething)
{ {
nextRow = -1; nextRow = -1;
@ -922,13 +926,23 @@ class SubCircuit::SolverWorker
didSomething = true; didSomething = true;
else if (!allowOverlap && haystack.usedNodes[j]) else if (!allowOverlap && haystack.usedNodes[j])
didSomething = true; didSomething = true;
else else {
newRow.insert(j); newRow.insert(j);
usedNodes[j].insert(i); // Store the needle index by haystack node index
} }
}
// This indicates there are no available haystack nodes to assign to the needle
if (newRow.size() == 0) if (newRow.size() == 0)
return false; return false;
// If there are multiple needles assigned to the haystack node, the solution is invalid
if (newRow.size() == 1 && usedNodes[*newRow.begin()].size() > 1)
return false;
if (newRow.size() >= 2 && (nextRow < 0 || needle.adjMatrix.at(nextRow).size() < needle.adjMatrix.at(i).size())) if (newRow.size() >= 2 && (nextRow < 0 || needle.adjMatrix.at(nextRow).size() < needle.adjMatrix.at(i).size()))
nextRow = i; nextRow = i;
enumerationMatrix[i].swap(newRow); enumerationMatrix[i].swap(newRow);
} }
} }