@@ -547,18 +547,21 @@ DbInstancePinIterator::DbInstancePinIterator(const Instance* inst,
547547bool DbInstancePinIterator::hasNext ()
548548{
549549 if (top_) {
550- if (bitr_ == bitr_end_) {
551- return false ;
550+ while (bitr_ != bitr_end_) {
551+ dbBTerm* bterm = *bitr_;
552+ if (!network_->isPGSupply (bterm)) {
553+ next_ = network_->dbToSta (bterm);
554+ bitr_++;
555+ return true ;
556+ }
557+ bitr_++;
552558 }
553- dbBTerm* bterm = *bitr_;
554- next_ = network_->dbToSta (bterm);
555- bitr_++;
556- return true ;
559+ return false ;
557560 }
558561
559562 while (iitr_ != iitr_end_) {
560563 dbITerm* iterm = *iitr_;
561- if (!iterm-> getSigType (). isSupply ( )) {
564+ if (!network_-> isPGSupply (iterm )) {
562565 next_ = network_->dbToSta (*iitr_);
563566 ++iitr_;
564567 return true ;
@@ -621,7 +624,7 @@ bool DbNetPinIterator::hasNext()
621624{
622625 while (iitr_ != iitr_end_) {
623626 dbITerm* iterm = *iitr_;
624- if (!iterm-> getSigType (). isSupply ( )) {
627+ if (!network_-> isPGSupply (iterm )) {
625628 next_ = network_->dbToSta (*iitr_);
626629 ++iitr_;
627630 return true ;
@@ -685,11 +688,14 @@ bool DbNetTermIterator::hasNext()
685688
686689Term* DbNetTermIterator::next ()
687690{
688- if (iter_ != end_) {
691+ while (iter_ != end_) {
689692 dbBTerm* bterm = *iter_;
690693 iter_++;
691- return network_->dbToStaTerm (bterm);
694+ if (!network_->isPGSupply (bterm)) {
695+ return network_->dbToStaTerm (bterm);
696+ }
692697 }
698+
693699 if (mod_iter_ != mod_end_ && (network_->hasHierarchy ())) {
694700 dbModBTerm* modbterm = *mod_iter_;
695701 mod_iter_++;
@@ -4991,4 +4997,31 @@ void dbNetwork::removeDriverFromCache(const Net* net, const Pin* drvr)
49914997 }
49924998}
49934999
5000+ bool dbNetwork::isPGSupply (dbITerm* iterm) const
5001+ {
5002+ if (iterm->getSigType ().isSupply ()) {
5003+ return true ;
5004+ }
5005+
5006+ return isPGSupply (iterm->getNet ());
5007+ }
5008+
5009+ bool dbNetwork::isPGSupply (dbBTerm* bterm) const
5010+ {
5011+ if (bterm->getSigType ().isSupply ()) {
5012+ return true ;
5013+ }
5014+
5015+ return isPGSupply (bterm->getNet ());
5016+ }
5017+
5018+ bool dbNetwork::isPGSupply (dbNet* net) const
5019+ {
5020+ if (net == nullptr ) {
5021+ return false ;
5022+ }
5023+
5024+ return net->isSpecial () && net->getSigType ().isSupply ();
5025+ }
5026+
49945027} // namespace sta
0 commit comments