More accurate tests in Katabatic to stop whining about bad doglegs.

* Change: In Katabatic, in AutoSegment::canonize() and
    Session::_canonize() no longer tag Global as WeakGlobal also.
    This avoid to try to make dogleg on them when we shouldn't.
    They where staying WeakGlobal even when there were no longer
    connected to a global.
* Change: In Katabatic, in AutoSegment::makeDogleg(), suppress the
    bug for pad message when we are in the global routing stage.
    At that point it is allowed to make doglegs under the pads are
    they are "layer change" ones.
This commit is contained in:
Jean-Paul Chaput 2014-10-03 19:00:02 +02:00
parent dbf87493eb
commit fddf11516a
3 changed files with 16 additions and 5 deletions

8
.gitignore vendored
View File

@ -20,3 +20,11 @@ documentation/UsersGuide/UsersGuide.pdf
documentation/UsersGuide/UsersGuide.out
documentation/UsersGuide/UsersGuide.toc
documentation/UsersGuide/UsersGuide.html
documentation/RDS/RDS.aux
documentation/RDS/RDS.dvi
documentation/RDS/RDS.out
documentation/RDS/RDS.pdf
documentation/RDS/RDS.tex
documentation/RDS/RDS.toc

View File

@ -1048,8 +1048,10 @@ namespace Katabatic {
canonical->setFlags( SegCanonical );
if (hasGlobal) {
for ( size_t i=0 ; i<segments.size() ; ++i )
segments[i]->setFlags( SegWeakGlobal );
for ( size_t i=0 ; i<segments.size() ; ++i ) {
if (not segments[i]->isGlobal())
segments[i]->setFlags( SegWeakGlobal );
}
} else {
for ( size_t i=0 ; i<segments.size() ; ++i )
segments[i]->unsetFlags( SegWeakGlobal );
@ -1742,7 +1744,8 @@ namespace Katabatic {
unsigned int rflags = 0;
if (doglegGCell->isUnderIoPad()) {
if ( doglegGCell->isUnderIoPad()
and (Session::getKatabatic()->getState() != EngineGlobalLoaded) ) {
cerr << Bug( "Attempt to make a dogleg in a GCell under a Pad\n"
" %s\n"
" %s"

View File

@ -172,8 +172,8 @@ namespace Katabatic {
ltrace(110) << "Canonical: " << canonical << endl;
for ( size_t j=0 ; j<aligneds.size() ; j++ ) {
if (isWeakGlobal) aligneds[j]->setFlags ( SegWeakGlobal );
else aligneds[j]->unsetFlags( SegWeakGlobal );
if (isWeakGlobal and not aligneds[j]->isGlobal()) aligneds[j]->setFlags ( SegWeakGlobal );
else aligneds[j]->unsetFlags( SegWeakGlobal );
if (aligneds[j] == canonical) continue;
if (aligneds[j]->isCanonical()) {