placer: Fix conflicts during constraint legalisation

Signed-off-by: David Shah <dave@ds0.me>
This commit is contained in:
David Shah 2018-10-11 11:50:56 +01:00
parent 848ce6d41c
commit 228cbf77d0

View File

@ -237,6 +237,12 @@ class ConstraintLegaliseWorker
return false; return false;
} }
} }
// Don't place at tiles where any strongly bound Bels exist, as we might need to rip them up later
for (auto tilebel : ctx->getBelsByTile(loc.x, loc.y)) {
CellInfo *tcell = ctx->getBoundBelCell(tilebel);
if (tcell && tcell->belStrength >= STRENGTH_STRONG)
return false;
}
usedLocations.insert(loc); usedLocations.insert(loc);
for (auto child : cell->constr_children) { for (auto child : cell->constr_children) {
IncreasingDiameterSearch xSearch, ySearch, zSearch; IncreasingDiameterSearch xSearch, ySearch, zSearch;