In Etesian, check for unplaced intermediate models with AB.
* Bug: In Etesian::EtesianEngine::toColoquinte(), when the master Cell of an instance has an abutment box, this instance *must* be placed so we can compute the positions of its own instances. Throw an error if it's not the case.
This commit is contained in:
parent
d175e1b27a
commit
d86527d384
|
@ -2,6 +2,7 @@
|
|||
#include "coloquinte/rough_legalizers.hxx"
|
||||
#include "coloquinte/optimization_subproblems.hxx"
|
||||
|
||||
#include <iostream>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cassert>
|
||||
|
@ -10,6 +11,9 @@
|
|||
namespace coloquinte{
|
||||
namespace gp{
|
||||
|
||||
using std::cerr;
|
||||
using std::endl;
|
||||
|
||||
namespace{
|
||||
const capacity_t default_density_mul = 256;
|
||||
}
|
||||
|
|
|
@ -477,6 +477,15 @@ namespace Etesian {
|
|||
occurrence.makeInvalid();
|
||||
instance->slaveAbutmentBox();
|
||||
}
|
||||
|
||||
if (not masterCell->getAbutmentBox().isEmpty()
|
||||
and ( (instance->getPlacementStatus() != Instance::PlacementStatus::PLACED)
|
||||
or (instance->getPlacementStatus() != Instance::PlacementStatus::FIXED ) ) ) {
|
||||
throw Error( "EtesianEngine::toColoquinte(): Non-leaf instance \"%s\" of \"%s\" has an abutment box but is *not* placed."
|
||||
, getString(instance ->getName()).c_str()
|
||||
, getString(masterCell->getName()).c_str()
|
||||
);
|
||||
}
|
||||
}
|
||||
UpdateSession::close();
|
||||
|
||||
|
@ -590,7 +599,9 @@ namespace Etesian {
|
|||
|
||||
}
|
||||
|
||||
void EtesianEngine::preplace (){
|
||||
|
||||
void EtesianEngine::preplace ()
|
||||
{
|
||||
using namespace coloquinte::gp;
|
||||
|
||||
// Perform a very quick legalization pass
|
||||
|
|
Loading…
Reference in New Issue