diff --git a/katana/src/RoutingEvent.cpp b/katana/src/RoutingEvent.cpp index 1f3bbc18..77851505 100644 --- a/katana/src/RoutingEvent.cpp +++ b/katana/src/RoutingEvent.cpp @@ -476,8 +476,7 @@ namespace Katana { _axisHistory = _segment->getAxis(); _eventLevel = 0; cdebug_log(9000,0) << "Deter| addInsertEvent() @" << fsm.getCost(itrack).getTrack() << endl; - if (not _segment->isReduced()) - Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() ); + Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() ); fsm.setState( SegmentFsm::SelfInserted ); } else { // Do ripup. diff --git a/katana/src/Session.cpp b/katana/src/Session.cpp index 1c912158..051d168c 100644 --- a/katana/src/Session.cpp +++ b/katana/src/Session.cpp @@ -153,11 +153,12 @@ namespace Katana { _doRemovalEvents(); - for ( size_t i=0 ; i<_insertEvents.size() ; ++i ) { - if (_insertEvents[i]._segment) { - _insertEvents[i]._track->insert( _insertEvents[i]._segment ); + for ( const Event& event : _insertEvents ) { + if (event._segment) { + if (event._segment->isReduced()) event._segment->setAxis( event._track->getAxis() ); + else event._track->insert( event._segment ); } - if (_insertEvents[i]._marker) _insertEvents[i]._track->insert( _insertEvents[i]._marker ); + if (event._marker) event._track->insert( event._marker ); } _insertEvents.clear(); diff --git a/kite/src/KiteEngine.cpp b/kite/src/KiteEngine.cpp index d4fc36ef..493ef554 100644 --- a/kite/src/KiteEngine.cpp +++ b/kite/src/KiteEngine.cpp @@ -218,6 +218,7 @@ namespace Kite { UpdateSession::open(); for ( Net* net : cell->getNets() ) { + if (net->isClock() or net->isSupply()) continue; if (NetRoutingExtension::isManualGlobalRoute(net)) continue; // First pass: destroy the contacts @@ -227,8 +228,14 @@ namespace Kite { if (contact and not contact->getAnchorHook()->isAttached()) contacts.push_back( contact ); } - for ( Contact* contact : contacts ) - contact->destroy(); + for ( Contact* contact : contacts ) contact->destroy(); + + contacts.clear(); + for ( Component* component : net->getComponents() ) { + Contact* contact = dynamic_cast(component); + if (contact) contacts.push_back( contact ); + } + for ( Contact* contact : contacts ) contact->destroy(); // Second pass: destroy unconnected segments added by Knik as blockages std::vector segments; diff --git a/kite/src/RoutingEvent.cpp b/kite/src/RoutingEvent.cpp index a1c4f37c..bbe1dc27 100644 --- a/kite/src/RoutingEvent.cpp +++ b/kite/src/RoutingEvent.cpp @@ -476,8 +476,7 @@ namespace Kite { _axisHistory = _segment->getAxis(); _eventLevel = 0; cdebug_log(9000,0) << "Deter| addInsertEvent() @" << fsm.getCost(itrack).getTrack() << endl; - if (not _segment->isReduced()) - Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() ); + Session::addInsertEvent( _segment, fsm.getCost(itrack).getTrack() ); fsm.setState( SegmentFsm::SelfInserted ); } else { // Do ripup. diff --git a/kite/src/Session.cpp b/kite/src/Session.cpp index 978d7616..930d1341 100644 --- a/kite/src/Session.cpp +++ b/kite/src/Session.cpp @@ -155,11 +155,12 @@ namespace Kite { _doRemovalEvents(); - for ( size_t i=0 ; i<_insertEvents.size() ; ++i ) { - if (_insertEvents[i]._segment) { - _insertEvents[i]._track->insert( _insertEvents[i]._segment ); + for ( const Event& event : _insertEvents ) { + if (event._segment) { + if (event._segment->isReduced()) event._segment->setAxis( event._track->getAxis() ); + else event._track->insert( event._segment ); } - if (_insertEvents[i]._marker) _insertEvents[i]._track->insert( _insertEvents[i]._marker ); + if (event._marker) event._track->insert( event._marker ); } _insertEvents.clear();