Opaque blocks area was not taken into account in EtesianEngine::toHurricane().

* Bug: In EtesianEngine::toHurricane(), when looping over the AB of all the
    FIXED instances occurrences, we where excluding contained AB instead of
    merging them...
This commit is contained in:
Jean-Paul Chaput 2021-03-29 16:55:54 +02:00
parent 9dc0040703
commit 109b2e4dee
1 changed files with 14 additions and 1 deletions

View File

@ -690,7 +690,7 @@ namespace Etesian {
Occurrence cellOccurrence = toCell( occurrence );
cellOccurrence.getPath().getTransformation().applyOn( instanceAb );
if (not topPlaceArea.contains(instanceAb)) {
if (not topPlaceArea.intersect(instanceAb)) {
if (instance->getPlacementStatus() != Instance::PlacementStatus::FIXED)
cerr << Warning( "EtesianEngine::readSlices(): Instance %s is not fully enclosed in the top cell.\n"
" * topPlaceArea=%s\n"
@ -703,6 +703,19 @@ namespace Etesian {
continue;
}
if (not topPlaceArea.contains(instanceAb)) {
if (instance->getPlacementStatus() != Instance::PlacementStatus::FIXED)
cerr << Warning( "EtesianEngine::readSlices(): Instance %s is not fully enclosed in the top cell.\n"
" * topPlaceArea=%s\n"
" * instanceAb=%s cell=%s"
, getString(instance->getName()).c_str()
, getString(topPlaceArea).c_str()
, getString(instanceAb).c_str()
, getString(instance->getCell()).c_str()
) << endl;
instanceAb = topPlaceArea.getIntersection( instanceAb );
}
_area->merge( cellOccurrence, instanceAb );
}